| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 910 人关注过本帖
标题:我又回来了这次是阶乘的一个函数的问题。。
取消只看楼主 加入收藏
海猫猫
Rank: 2
等 级:论坛游民
帖 子:7
专家分:15
注 册:2016-9-4
结帖率:100%
收藏
已结贴  问题点数:18 回复次数:1 
我又回来了这次是阶乘的一个函数的问题。。
核心的代码为:
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?。。。
以上,提前谢谢各位了。。对递归了解不够深,问题问的也模模糊糊的。。。抱歉



搜索更多相关主题的帖子: recursion return 
2016-12-07 04:49
海猫猫
Rank: 2
等 级:论坛游民
帖 子:7
专家分:15
注 册:2016-9-4
收藏
得分:0 
回复 4楼 吹水佬
原来还有一个重要的知识点叫做"栈"!我只是在书上看过他的基础的概念,但是目前还没有学到这。。。。那么前辈,问题2里我那样理解是正确的吗?
2016-12-07 11:17
快速回复:我又回来了这次是阶乘的一个函数的问题。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012299 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved