我试图在不了解基本情况的情况下通过计算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 = %dn", 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
,正如您的评论所说,该函数仍然可以工作,只是结果尚未确定。
- 您没有设置num变量的基值,但它成功地工作了这是您的代码的具体情况
- 在此代码中,您使用了"for"语句如果传入的num为0,则它不会通过"for"语句传递,因为0<0不是真的。这就是为什么它在最后一个循环中返回零的初始和值
- 安全算法参考,这是递归函数的标准代码
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循环,每次重新启动(调用(函数时,它都会将num
的当前副本更改为0.