C++用函数递归求1+2+到n的问题

2024年11月15日 20:36
有4个网友回答
网友(1):

其实这里定义了t是多余的。
这个函数可以这样写:
int sum(int n)
{
if(n<1) return 0;
else return n+sum(n-1);
}
其实递归调用是这样的。如n=3,第一次调用sum(n),n>=1 所以执行return n+sum(n-1),在函数返回之前,先会计算sum(n-1)……最后sum(0)=0,然后再一层一层的返回。最后会返回5了。

网友(2):

你上面说t(6)=n(6)+n(0);我搞不懂,t,n不是函数,怎么能这么表示呢?
n和t都是sum()函数的局部变量。要注意的是每一层的sum()的n和t都不一样。当执行到t=n+sum(n-1)时,函数调用上一层sum()函数。上一层函数的n等于刚才的函数中的n-1,就是形参复制实参,而这两个变量名可以相同,也可以不相同,无所谓的。
而在本函数中调用的n当然是本形参中的n,即使有一个全局变量也是n,这时也会被屏蔽。
至于为什么以0为结束点,这个完全是可以的,当然,以1为结束点也可以。那就这样写:
int sum(int n)
{
if(n==1)
return 1;
else
return(n+sum(n-1));
}
结果应该是一样的。现在想想如果以0为结束点的话。
不过是此基础上最后多加了个0,这不影响结果的。

网友(3):

进入一层递归,相当于进入一个新的空间,内部运算的结果只对内部负责,
对外返回一个对外的值

sum(3)的求解基于sum(2)的值,但不要把这里的3和2放到一个空间下去判断,这样会越来越糊涂

sum(3)=3+sum(2)这也是我们学习数学的概念吧,

当求出sum(2)时,你也同样不要考虑他和sum(1)和sum(0)的关系,只要
利用sum(2)的结果就可以了。

网友(4):

因为sum函数里有个判断 if(n<1) t=0;,这在调用sum(1)时,就有t=1+sum(1-1),因为,1-1=0,这时,就返回t=0;。