斐波那契数列非递归算法(fibonacci)

斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。
fibonacci 数列定义:
n = 1,2 时,fib(n) = 1
n > 2 时,fib(n) = fib(n-2) + fib(n-1)

     

此算法最大的优点是不存在重复计算,故效率比递归算法快的多得多。

下面简略比较一下递归与非递归之间的区别:

      使用非递归算法求到第n(n>3)个月兔子的数量,是从第3个月开始,将前两个月兔子相加求当月的兔子的数量,并记录

前1个月兔子的数量,直到第n个月,用n-1个月和n-2个月兔子相加求出结果,这样的好处是,我们只计算了n次就求出了结

果,即时间复杂度为O(n);

     用递归算法又会是什么结果呢?求解fib(n),把它推到求解fib(n-1)和fib(n-2)。也就是说,为计算fib(n),必须先计算

fib(n-1)和fib(n-2),而计算fib(n-1)和fib(n-2),又必须先计算fib(n-3)和fib(n-4)。依次类推,直至计算fib(1)和fib(0),

分别能立即得到结果1和0。在递推阶段,必须要有终止递归的情况。例如在函数fib中,当n为1和0的情况。在回归阶段,当

获得最简单情况的解后,逐级返回,依次得到稍复杂问题的解,例如得到fib(1)和fib(0)后,返回得到fib(2)的结果,……,

在得到了fib(n-1)和fib(n-2)的结果后,返回得到fib(n)的结果,时间复杂度为O(2n)(括号内为2的n次方).

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值