【问题标题】:is it the fibonacci algorithm without recursion linear?它是没有递归线性的斐波那契算法吗?
【发布时间】:2014-10-19 14:41:03
【问题描述】:

我知道斐波那契算法可以像这样在没有递归的情况下编程:

int fibo(int n){
 if(n <= 1){
  return n;
 }
 int fibo = 1;
 int fiboPrev = 1;
 for(int i = 2; i < n; ++i){
  int temp = fibo;
  fibo += fiboPrev;
  fiboPrev = temp;
 }
 return fibo;
}

而且递归斐波那契的复杂度大约为 O(2^k),但我看到的非递归算法是 O(n);所以看起来效率更高,是我的微积分还是非递归解决方案有任何隐藏的复杂性?

【问题讨论】:

  • 不同的算法可能有不同的复杂性,即使它们计算相同的东西。前任。有几个O(n^2)排序算法,还有几个O(n log n)排序算法。
  • 另外看看斐波那契数可以表示为一个单一的非递归方程:mathworld.wolfram.com/BinetsFibonacciNumberFormula.html

标签: recursion


【解决方案1】:

自行评估实施的复杂性。在这种情况下,与输入 n 相关的复杂度由 for 循环定义,它与 n 的大小成正比。因此,复杂度是 O(n) - 线性的。

【讨论】:

  • 但是这里还有一个额外的因素:斐波那契数的位数随着序列的进行而增加。因此,对于恒定位大小,计算一个的复杂性是线性的(因此对可以计算的数字的计数有限制),但对于可变位大小,它不会是线性的。
猜你喜欢
  • 2014-12-28
  • 2010-12-03
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 2017-11-18
相关资源
最近更新 更多