我又回来了这次是阶乘的一个函数的问题。。
核心的代码为:printf("loop: %d factorial = %d\n",num,fact(num));
printf("recursion: %d factorial = %ld\n",num,rfact(num));
用循环的阶乘函数为
long fact(int n)
{
long ans ;
for (ans = 1; n > 1;n++)
ans *= n;
return ans;
}
用递归的阶乘函数为
long rfact(int n)
{
long ans;
if(n > 0)
ans = n * rfact(n-1);
esle
ans = 1;
return ans;
}
问题1 关于用递归的函数我搞不清楚他的流程。。我的理解是这样的:(假设输入的是一个5
5大于一个0,成立,进入ans = n * rfact(n-1) n此时变成了4,3,2,1,0 结果为 ans==120;但是这个自己调用自己的函数什么时候会退出?一共是调用5次吗?
如果可以的话希望可以给我讲讲这个函数的具体流程,这个语句结束了到哪里之类的。
问题2 关于esle,当n减到0时难道不是要执行这个语句吗?那么ans的返回值不会变成1吗?为什么还是120呢?(刚刚我突然想到,每级递归变量都属于本级递归私有,于是第五次递归的n是0,ans变成1。但是返回值是返回最开始的ans?。。。
以上,提前谢谢各位了。。对递归了解不够深,问题问的也模模糊糊的。。。抱歉