递归算法

  

 

递归(自己调用自己)
只要:
1:有终止条件
2:有递归关系
就可以构成有效的递归算法嘛
1)递归程序有2个出口     一个是退出递归的条件     另一个是继续递归
2)递归调用后会返回调用他的函数  
当i=10的时候.它便跑到了
 return   Foo(i   -1)   +   Foo(i   -   2);这一段   递归嘛.自减.我还懂一点点.这时候它又调自己了,还处于Foo(i   -1)这块(应该还没运行到Foo(i   -   2),我是这样理解.如果有误.请指明)
像这样如此类推的减下去.9,8,7,6,5,4,3,2   到2了.   好.问题出来了..到了二它返回一.调试的时候到返回一后它会跳出去"}"   之后呢.下一步它又跳到
else   return   Foo(i   -1)   +   Foo(i   -   2);这是为什么呢~?   更让我奇怪的是.当跳到这一步的时候.我发现I的值竟然变成3了.这3是怎么算出来的?到底是为什么呢~?   我就是想不透~~我把代码改了一下else   return   Foo(i   -1)   +   Foo(i   -   2);改成else   return   Foo(i   -1);但走的步骤还是一样~   这是为啥哩?~   哪位高人能让我恍然大悟.顺便能够附带一份简明的递归原理给我(不要太复杂.看不下去的..)     
先执行fn-1)最后还是执行fn-1return 1 1的值取代了fn-1)为什么要取    代??????????????(因为就是自己调用自己的所以要取代啊!)
 
 递归的特点
问题: 先从大到小,在从小到大(过程) 先递归深度
     没有终止 会出现堆栈溢出 (每一个函数在调用的时候 计算机都会给运行函数的线程提供一个堆栈 每一个函数调用时都会把相关信息放到这个堆栈中,因为线程拥有的堆栈的大小是固定的) 所以一定要保证递归是要结束的 每个线程堆栈大小是固定的 调用一次函数 线程堆栈都会增加一些控制信息 如果调用很多此函数的话 信息总和超过了系统分配给的空间之后就会错误
 
1、每个递归函数的开头一定是判断递归结束条件是否满足的语句(一般用if语句)
2、函数体一定至少有一句是“自己调用自己”的
3、每个递归函数一定有一个控制递归可以终结的变量(通常是作为函数的参数而存在)
 每次自己调用自己时,此变量会变化(一般是变小),并传递给被调用的函数
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值