斐波纳契系列计算需要多长时间?

时间:2014-10-21 05:24:55

标签: time-complexity pseudocode fibonacci

我已经通过应用强力技术创建了递归调用树,但是当我给这个算法100个值时,它需要数万亿年才能计算出来。

你们建议我做什么,通过提供100个值来快速运行

这是我到目前为止所做的事情

function fib(n) {
    if (n =< 1) {
      return n;
    } else {
        return fib(n - 1) + fib(n - 2);
    }
}

3 个答案:

答案 0 :(得分:1)

您可以拥有&#34;缓存&#34;,您可以在其中保存已计算的斐波那契数字。每次尝试计算

fib(n-1) /* or */ fib(n-2) ;

您首先要查看已经计算过的数字数组。如果它在那里,你节省了大量的时间。 因此,每次计算斐波那契数时,请将其保存到相应索引处的数组或列表中。

function fib(n) 
{

if (n =< 1) 
{
  return n;
}
if(fiboList[n] != defaultValue)
{
  return fiboList[n];
}
else 
{
    int fibo = fib(n-1) + fib(n-2);
    fiboList[n] = fibo;
    return fibo;
}

}

答案 1 :(得分:1)

您也可以使用循环:

int a = 1;
int b = 1;
for(int i = 2; i < 100; i++){
    int temp = a + b;
    a = b;
    b = temp;
}
System.out.println("Fib 100 is: "+b);

运行时是线性的,可以避免递归调用造成的开销。

编辑:请注意结果是错误的。由于Fib(100)大于Integer.MAX_VALUE,您必须使用BigInteger或类似方法来获得正确的输出,但“逻辑”将保持不变。

答案 2 :(得分:-1)

def fib_seq(x):  
    a,b = 1,1
    while x>1:
        a,b=b,a+b
        x-=1
    print(b)