我已经通过应用强力技术创建了递归调用树,但是当我给这个算法100个值时,它需要数万亿年才能计算出来。
你们建议我做什么,通过提供100个值来快速运行
这是我到目前为止所做的事情
function fib(n) {
if (n =< 1) {
return n;
} else {
return fib(n - 1) + fib(n - 2);
}
}
答案 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)