学习递归

haizi_24 2009-05-04 11:00:26
请问大家,如何学习递归,特别是循环体内的递归?我尝试思考递归程序的执行过程,发现很混乱。请大家给与帮助。
...全文
118 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
dskit 2009-05-05
  • 打赏
  • 举报
回复
汉诺塔学递归
  • 打赏
  • 举报
回复
[Quote=引用楼主 haizi_24 的帖子:]
请问大家,如何学习递归,特别是循环体内的递归?我尝试思考递归程序的执行过程,发现很混乱。请大家给与帮助。
[/Quote]

可以自己尝试递归转成循环加栈的形式,这样容易看清楚些。不过不是所有的递归都能转。

可以看看这个贴
http://topic.csdn.net/t/20020606/19/784328.html
nwao7890 2009-05-05
  • 打赏
  • 举报
回复
我同楼主一样,来学习递归了,我感觉太难抽象出递归来了
jackyjkchen 2009-05-05
  • 打赏
  • 举报
回复
看递归图,就明白了
liao05050075 2009-05-05
  • 打赏
  • 举报
回复
慢慢来吧。见得多,用得多了,也就理解了。
想当初我开始看递归的时候昏到不行。然后就不去理它,过了一阵再看,发现原来就那么简单而已。
有时候现在看不明白的东西可以留着,等回头再看。随着你的知识的增加,你有可能过一阵就看明白了
lingyin55 2009-05-05
  • 打赏
  • 举报
回复
其实不难的,给一个详细的讲解递归原理的链接,
分步说明了每一次的操作。参考下吧

http://www.bycnsky.cn/article.asp?id=238
pathuang68 2009-05-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jixingzhong 的回复:]
其实很简单,就明白递归的第一步,第n步和最后一步就可以了
[/Quote]
LS说得对。

曾经和很多朋友讨论这个问题,最后的结论是,某些人觉得递归很难理解,有些人则觉得在简单不过了,呵呵,两个极端啊,所以如果你觉得递归不好理解,这也是很正常。

在此我举一个计算阶乘的例子,看看能否让你突然明白起来(C程序,应该非常容易转换成java程序):
#include <iostream>
#include <stdio.h>
using namespace std;

long factorial(long n) //计算n的阶乘
{
long result = 1; // 先将结果设定为1,因为1! = 1,
if(n > 1) // 如果n > 1
{
result = factorial(n - 1) * n; // 比如3的阶乘 = factorial(2) * 3
}
else // 否则 n = 1
{
result = 1 * result; // 由于factorial(1) = factorial(0) * 1,其中
} // factorial(0)在此程序中未被定义,因此可视为递归的
return result; // 结束条件,并将factorial(0)设置成了1
}

int main(void)
{
cout << factorial(1) << endl;
cout << factorial(2) << endl;
cout << factorial(3) << endl;
cout << factorial(4) << endl;
cout << factorial(5) << endl;
cout << factorial(6) << endl;
return 0;
}
输出结果:
1
2
6
24
120
720

当然计算阶乘用循环也很好的。

另在设计模式中Composite模式实际上也可以实现递归,而那个递归或许你会觉得更自然一点,请看:
http://blog.csdn.net/pathuang68/archive/2009/04/25/4122725.aspx
yeliangang 2009-05-05
  • 打赏
  • 举报
回复
递归不难,难的是把问题抽象为递归形式,再求解的过程
goodname 2009-05-05
  • 打赏
  • 举报
回复
简言之,只不过是不断的调用同一个函数而已。
ysysbaobei 2009-05-05
  • 打赏
  • 举报
回复
amossavez 2009-05-05
  • 打赏
  • 举报
回复
搞清楚递归,主要是把过程弄清楚,过程清楚了,再找规律,也就是进行抽象!!
自律则自由 2009-05-05
  • 打赏
  • 举报
回复
把你的思路搞清楚,开始的时候可能会出现在错误,但不要紧,多练几次。
加油!
光宇广贞 2009-05-05
  • 打赏
  • 举报
回复
递归啊……
学好它之前先复习一下高等数学中的级数部分。

然后你想不会都不可能了……

程序上遇到的困惑一定是把数学给忘了……
Paradin 2009-05-05
  • 打赏
  • 举报
回复
逻辑上是树
实现是栈
tonforce 2009-05-04
  • 打赏
  • 举报
回复
开始看起来是比较绕
我到现在还比较害怕递归的干活。
jixingzhong 2009-05-04
  • 打赏
  • 举报
回复
其实很简单,就明白递归的第一步,第n步和最后一步就可以了
arong1234 2009-05-04
  • 打赏
  • 举报
回复
递归自己没有什么好的学习方法,关键在于自己理清思路。尝试手工画一画每层函数调用时的局部变量的值
mengde007 2009-05-04
  • 打赏
  • 举报
回复
发个链接;
http://baike.baidu.com/view/1733593.htm
主要是举一反三;
S_zxing 2009-05-04
  • 打赏
  • 举报
回复
递归应该是使你把程序看得更清楚的
非递归才难看懂呢

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧