Fast Fibonacci使用递归

时间:2013-11-02 11:30:07

标签: scala recursion fibonacci tail-recursion

我在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)
   }

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);    
  }
}

希望有所帮助