【发布时间】:2016-04-12 19:01:30
【问题描述】:
今天过得怎么样 :), 看看下面的程序,下面写的程序是计算前n个自然数的和,问题是我得到了n-1个自然数的和,谁能解释一下为什么?
任何人都可以解释为什么a--而不是--a。
#include<stdio.h>
main()
{
int a,sum;
printf("Enter a number.");
scanf("%d",&a);
sum=sumnat(a);
printf("Sum of the first %d natural numbers is %d.",a,sum);
}
sumnat(a)
{
int b;
if(a==0)
{
return 0;
}
else
{
b=a+sumnat(--a);
return(b);
}
}
【问题讨论】:
-
传入
-1,你会溢出堆栈,因为它会永远递归 -
@self,但这在这个网站上很正常!
-
你读过代码吗?
a == 0是递归的出口点 -
是的,但为什么 a-- 不起作用,只有 --a
-
如果您仍在使用像
main()这样没有返回类型的东西,并且正在为定义变量和初始化变量之间的区别而苦苦挣扎——您最好花时间学习语言的基础知识而不是担心递归和未定义的行为。