函数递归——斐波那契数

1.何为斐波那契数列?

斐波那契数列:1,1,2,3,5,8,13,21,34,55,89…… ,以如下被以递归的方法定义:从第三项开始,每一项都等于前两项之和。

2.用数学公式表示

F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。

3.代码实现

完整代码测试:

运行结果(n数值小的情况):

可是当我们输入50这较大的数字时并没有立刻得出答案(光标闪烁代表正在计算)

直到好一会才算出来一个错误值

同时我们会发现电脑风扇的声音开始变大,当我们打开任务管理器时发现为了计算这第五十个斐波那契数,CPU就被占用了超过10%的资源!!!

CPU:我拉满了,剩下靠你了

当我们n输⼊为50的时候,需要很⻓时间才能算出结果,这个计算所花费的时间,是我们很难接受的,
这也说明递归的写法是⾮常低效的,那是为什么呢?
其实递归程序会不断的展开,在展开的过程中,我们不难看出,在递归的过程中会有重复的计算,然而随着数值越大,重复的次数就会越多,导致计算量变大,效率大幅度降低,同样也时硬件占用变高。我们可以对此进行一个小测试:
运行结果:
我们可以看到采用递归的方式计算第40个斐波那契数时,第3个斐波那契数就被重复计算了39088169次,这样的计算效率是非常低下的。所以计算斐波那契数时,使用递归的方式是十分不明智的,我们就可以考虑采用迭代的方式解决。列如:
我们知道斐波那契数的前两个数是1,然后前两个数相加就是第三个数,那么我们从前往后计算,将后面的值赋值给前面的值,从大到小计算就行了。
代码实现:
用迭代的方式去实现斐波那契数,效率就比递归高出了很多。
递归虽好,但不可过贪,适可而止就好。
  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值