这个递归函数变成无限循环。为什么?

时间:2014-10-25 19:36:43

标签: loops recursion infinite-loop

/ *如果我将第10行更改为“print_array_1(a,n,++ i)”或“print_array_1(a,n,i + 1)”,则此代码运行良好。* /

#include<iostream>
#include<cstdio>
using namespace std;

void print_array_1(int a[], int n , int i)        // n = size of array,   i = start index
{
    if(i>=n) return;
    printf("%d\n",a[i]);
    print_array_1(a, n, i++);
}

int main()
{
    int arr[] = {1, 2, 3, 4, 5};
    int n = 5;
    print_array_1(arr, n, 0);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

假设这是C,您应该使用++i。为什么?

i++递增i,但返回i++i递增i并返回1+1

使用i++,您继续使用相同的i值调用递归函数。

答案 1 :(得分:0)

i ++在调用print_array_1后使用后增加i ,因此每次调用都会得到i = 0.