首页 > 代码库 > 初级阶段算法之递归算法
初级阶段算法之递归算法
一:递归的概念
在一个函数中再次调用该函数自身的行为叫做递归,这样的函数被称作递归函数。需要注意的是,递归函数中的参数或者函数中的某一变量的值肯定会改变,若不改变,则函数在自己调用自己的过程中,没有标志函数停止的标志,函数会陷入死循环。
如: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的值。上述大段文字的步骤在程序内部已快速执行完毕。
初级阶段算法之递归算法