您的位置:首页 > Web前端

剑指offer 2.4 递归和循环-斐波那契数列计算改进

2014-08-10 16:18 344 查看
2.4.2 递归和循环
递归:函数内调用这个函数自身
循环:通过设置计算的初始值及终止条件,在一个范围内重复与运算





在树的遍历中,递归的实现明显比循环简单得多。
在面试的时候,如果没有特别要求,要尽量使用递归。

递归的缺陷:
递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址及临时变量,而往栈中压入数据和弹出数据都需要时间。
递归中很多计算都是重复的:本质是把一个问题分解成两个或者多个小问题。如果多个小问题存在相互重叠的部分,那么就存在重复计算。
===
调用栈溢出:每个进程的栈的容量是有限的。当递归调用的层级太多事,就会超出栈的容量,从而导致溢出。如上述求和例子,如果求1~5000,可能会出错。

面试题9:斐波那契数列





不好的实现:





分析:





大量重复计算,随着N的增大,重复计算量更大。
改进O(N):



采用自下而上的方法,首先根据f(0)f(1) 求出f(2), 再根据f(1)f(2)求出f(3)......



继续改进O(logN):








1个台阶:1种
2个台阶:2种,跳一个台阶、跳两个台阶
3个
4个
N个: 第一次跳一个,剩下n-1个台阶的跳法总数
第一次跳2个,剩下N-2个台阶的跳法总数
斐波那契~~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: