[英]Recursive function with stopping condition but without base case still works
我试图通过在不知道基本情况的情况下计算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;
}
我发现这个 function 有停止条件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
,正如您的评论所说, function 仍然可以工作,只是结果未确定。
int sumUpTo(int num)
{
if(num == 0)
return 0;
return sumUpTo(num - 1) + num;
}
它就像在你的 for 循环中一样工作
for(i = 0; i < num; i++)
如果num
是 0 或更低的 for 循环将永远不会执行,因为你有
int sum = 0;
它将返回 0,因为它从未进入 for 循环,并且每次您的 function 重新启动(召回)时,它会将num
的当前副本设置为 0..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.