关于递归的一补充
个人理解,不对的地方请指出来,共同学习。int hlt(int n , char a ,char b ,char c ){
if (n<=0)
return 0;
hlt(n-1,a, c ,b);
cout << a << " to " << c << endl;
hlt(n-1,b, a ,c);
}
1、递归函数实际上只处理最简单的情况,也就是说我们要解决的问题是N个这样的基本情况。(这就是先决条件)。
处理的基本情况 hlt(n-1,a, c ,b);
2、递归函数内有两部分,一部分是处理部分,处理的是基本情况。
hlt(n-1,a, c ,b);
cout << a << " to " << c << endl;
hlt(n-1,b, a ,c);
另一部是不处理部分(不处理部分要有return这样是为了结束递归)
if (n<=0)
return 0;
3、为了使递归结束,要函数每次调用自己时要使问题越来越细,最终到基本情况使递归结束。
hlt(n-1,a, c ,b);
n-1就是使问题越来越细,最终到基本情况使递归结束(n==1)。
4、递归调用必需要能回到基本情况,因每次调用就会产生一个新的函数副本,要是不能回基本情况结束递归,最终会使内存耗尽而死机。
[ 本帖最后由 ABCdiyPE 于 2009-6-15 18:09 编辑 ] 有一个入口,一个明确的出口即明确的结束条件
这是我的理解 递归上我也有点乱。同楼上 看看书吧,那个问5个人年龄的问题的解释的还是比较容易理解的。 向回贴的弟兄们敬礼!
wow goldwow gold wow gold wow gold wow gold 所以,在写服务器类型的程序时,要慎用递归,否则,会导致递归工作栈消耗很多资源
页:
[1]