递归(自己调用自己)
只要:
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);但走的步骤还是一样~ 这是为啥哩?~ 哪位高人能让我恍然大悟.顺便能够附带一份简明的递归原理给我(不要太复杂.看不下去的..)
先执行f(n-1)最后还是执行f(n-1)return 1; 1的值取代了f(n-1)为什么要取 代??????????????(因为就是自己调用自己的所以要取代啊!)
递归的特点
问题: 先从大到小,在从小到大(过程) 先递归深度
没有终止 会出现堆栈溢出 (每一个函数在调用的时候 计算机都会给运行函数的线程提供一个堆栈 每一个函数调用时都会把相关信息放到这个堆栈中,因为线程拥有的堆栈的大小是固定的) 所以一定要保证递归是要结束的 每个线程堆栈大小是固定的 调用一次函数 线程堆栈都会增加一些控制信息 如果调用很多此函数的话 信息总和超过了系统分配给的空间之后就会错误
1、每个递归函数的开头一定是判断递归结束条件是否满足的语句(一般用if语句)
2、函数体一定至少有一句是“自己调用自己”的
3、每个递归函数一定有一个控制递归可以终结的变量(通常是作为函数的参数而存在)
每次自己调用自己时,此变量会变化(一般是变小),并传递给被调用的函数
1万+

被折叠的 条评论
为什么被折叠?



