首页 新闻 会员 周边

请问实现递归算法的方法的运行流程

0
悬赏园豆:60 [已关闭问题]

C#的一个简单递归方法:

 

1 private int GetFactorail(int baseNum)
2 {
3 if (baseNum == 0)
4 return 0;
5 else if (baseNum == 1)
6 return 1;
7 else
8 return baseNum * GetFactorail(baseNum - 1);
9 }

 

请教下这个方法在运行时的循序流程,就是说这个方法都经过哪几步算出来最后结果的,或者高人们给指点指点要看哪些资料了解这方面的知识!

 

NEThyh的主页 NEThyh | 初学一级 | 园豆:81
提问于:2010-05-06 12:03
< >
分享
其他回答(4)
0

设置断点F11一行行调试就明白了。每次会把传入的参数循环减等到1或0退出来和前循环参数相乘。

 Response.Write(GetFactorail(0));
 Response.Write(GetFactorail(1));
 Response.Write(GetFactorail(2));
 Response.Write(GetFactorail(3));
 Response.Write(GetFactorail(4));
 Response.Write(GetFactorail(5));

》》012624120

Astar | 园豆:40805 (高人七级) | 2010-05-06 12:52
baseNum=10时, 它会循环调用本身执行return baseNum * GetFactorail(baseNum - 1)递减;当baseNum=1时会跳出,然后又会进去循环调用自身的return baseNum * GetFactorail(baseNum - 1);直到baseNum=10,完成输出结果,为什么会是这样的呢?
支持(0) 反对(0) NEThyh | 园豆:81 (初学一级) | 2010-05-06 13:04
0

上数据结构课时,老师曾经教过我构建一个简单的堆栈来分析递归调用过程,你也不妨试试这种办法。

eaglet | 园豆:17139 (专家六级) | 2010-05-06 13:20
不是太清楚啊!
支持(0) 反对(0) NEThyh | 园豆:81 (初学一级) | 2010-05-06 14:39
怎么没人给提点提点!
支持(0) 反对(0) NEThyh | 园豆:81 (初学一级) | 2010-05-06 14:56
0

调试一下。一步步走不就知道了

邢少 | 园豆:10926 (专家六级) | 2010-05-06 15:22
谁能指点下递归调用时堆栈的活动情况,或者给甩个连接过来
支持(0) 反对(0) NEThyh | 园豆:81 (初学一级) | 2010-05-06 15:27
0
LittlePeng | 园豆:3445 (老鸟四级) | 2010-05-06 16:26
0
1 private int GetFactorail(int baseNum)
2 {
3 if (baseNum == 0)
4 return 0;
5 else if (baseNum == 1)
6 return 1;
7 else
8 return baseNum * GetFactorail(baseNum - 1);
9 }
你这个列子,
 if (baseNum == 0)
4 return 0; 这一步没用的。
对与递归,你这样看。
return baseNum * GetFactorail(baseNum - 1);
这一步,调用的函数,当做是另一个名字的函数。只是功能上一样。这样一理解就很容易了。
过程就像是:

1                 1   
  2            2
    3        3
      4    4
        N
如上,从1进入,走到一个满足结束的条件,往回反
千羽 | 园豆:666 (小虾三级) | 2010-05-10 11:22
谢谢泥冰
支持(0) 反对(0) NEThyh | 园豆:81 (初学一级) | 2010-07-30 11:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册