首页 > 代码库 > 初级阶段算法之递归算法

初级阶段算法之递归算法

一:递归的概念

       在一个函数中再次调用该函数自身的行为叫做递归,这样的函数被称作递归函数。需要注意的是,递归函数中的参数或者函数中的某一变量的值肯定会改变,若不改变,则函数在自己调用自己的过程中,没有标志函数停止的标志,函数会陷入死循环。

  如:void digui1(){  printf("a\n");  }

         void digui2(){ digui1(); };

在主函数中调用函数digui2()时,函数会陷入死循环。

 

二、递归的具体执行顺序

   请看博客   http://www.cnblogs.com/DanielZheng/archive/2011/08/22/2149379.html   

       之前将递归理解为从后往前推,其实是存在问题的。请参考上述网址的介绍。

 

三、递归题解

  1.输入一个正整数n,输出1+2+3+。。。+n的结果。

技术分享    

答案:

int digui(int n)                         现在以具体的行为来理解这段函数。已知有编号为1,2,3,4,..., n个房间,每个房间里面都放了苹果,调用digui(n)函数就表示求解编号为n的

{                                            房间的的苹果数。现在告诉你    每间房里的苹果=这间房的编号+前一间房子里面的苹果数(用篮子盖住) 。现在要求第5间房子有多少苹果。

  if(n==1)  return 1;             digui(5)=digui(4)+5;   //第5间房子的苹果=第4间房子里的苹果+房间编号5(我不知道第4间房有多少苹果,那就去找喽)

  return digui(n-1)+n;           digui(4)=digui(3)+4;     //第4间房子的苹果=第3间房子的苹果+房间编号4(我不知道第3间房有多少苹果,那就去找喽)

}                                            digui(3)=digui(2)+3;   //第4间房子的苹果=第3间房子的苹果+房间编号3(我不知道第2间房有多少苹果,只能继续找)

                 digui(2)=digui(1)+2;    //第4间房子的苹果=第3间房子的苹果+房间编号2(我不知道第1间房有多少苹果,要去第1间房找)

                                              digui(1);                     //if(n==1)  return 1;   也就是说当你到达第1间房,digui(1)   return 1 告诉你第一间房只有一个苹果。

 知道第1间房子里的苹果,由此我们可以逆推出2号房间的苹果,然后一直推出第5间房子的苹果。

同理可推出第n间房子的结果,在主函数中调用digui(n)时即可return digui(n-1)+n返回结果给主函数。

digui(n) 直接返回digui(n-1)+n的值。上述大段文字的步骤在程序内部已快速执行完毕。

初级阶段算法之递归算法