我在Scala中实现了一个Fibonacci函数并且它工作正常但是当我输入50时,它需要很长时间来计算它,因为它必须每次计算2个先前的整数。我找到了一个保留前两个数字的函数。但是,有人可以告诉我如何编写这个函数使其接受2个整数而不是3并返回最后2个数来计算特定索引x处的斐波那契数。谢谢!
def fastFib(x: Long ): Long = {
def fast(x:Long , a:Long, b:Long):Long =
if (x<=0) a+b
else fast(x-1,b,a+b)
if (x<2) 1
else fast(x-2,0,1)
}
答案 0 :(得分:0)
您可以缓存中间结果,然后永远不会重新计算两次相同的结果
这是代码
//this supposed to contains all the value when initialized
//initialized with 0 for all value
val cache = Array [Int] (101);//0 to 100
cache(1)==1;//initial value
cache(2)=1;//initial value
def fibonacciCache(n:Int) : Int = {
if (n>100)
{
println("error");
return -1;
}
if (cache(n)!=0)//means value has been calculated
return cache(n);
else
{
cache(n)=fibonacciCache(n-1)+fibonacciCache(n-2);
return cache(n);
}
}
希望有所帮助