ABCdiyPE 发表于 2009-6-15 12:28:28

关于递归的一补充

个人理解,不对的地方请指出来,共同学习。

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 编辑 ]

kelvar 发表于 2009-6-15 23:32:08

有一个入口,一个明确的出口即明确的结束条件
这是我的理解

HDd1145 发表于 2009-6-16 01:16:22

cszs 发表于 2009-6-16 09:11:23

递归上我也有点乱。同楼上

coke_cz 发表于 2009-6-16 22:53:02

看看书吧,那个问5个人年龄的问题的解释的还是比较容易理解的。

luck068 发表于 2010-5-7 20:40:18

向回贴的弟兄们敬礼!











      
      
      
      
      


wow goldwow gold   wow gold   wow gold   wow gold

chary8088 发表于 2010-5-23 20:10:59

所以,在写服务器类型的程序时,要慎用递归,否则,会导致递归工作栈消耗很多资源
页: [1]
查看完整版本: 关于递归的一补充