我尝试在不了解基本情况的情况下通过计算 sum
直到 n
来解决问题,并得出了这个结果。它有效,但我不知道为什么。
int sumUpTo(int num)
{
int i, sum = 0; // I also tried not to initialize sum here but the results are the same
for(i = 0; i < num; i++)
sum = sumUpTo(num - 1) + num;
return sum;
}
int main()
{
int num;
printf("Enter a number: ");
scanf("%d", &num);
printf("Sum = %d\n", sumUpTo(num));
return 0;
}
我发现这个函数有停止条件i=num
但没有基本情况,循环将以sum = sumUpTo(0) + 1 + ... + num停止
。如果不知道 sumUpTo(0)
的值,程序如何运行?
这里可能会发生什么?
程序是否假定 sumUpTo(0)
的值为 0(无论是否初始化变量 sum
)?
最佳答案
假设您输入 3
作为输入。
for(i = 0; i < 3; i++) // Returns 3 + 3 = 6
for(i = 0; i < 2; i++) // Returns 2 + 1 = 3
for(i = 0; i < 1; i++) // Returns 1 + 0 = 1
for(i = 0; i < 0; i++) // Returns 0
这里递归将结束,因为不会调用另一个实例
如果您不初始化 sum
,正如您的评论所述,该函数仍然可以工作,只是结果未确定。
关于c - 具有停止条件但没有基本情况的递归函数仍然有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67236677/