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

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个台阶的跳法总数
斐波那契~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值