谈谈递归和循环在Fibonacci中的差别

在网上看资料的时候,谈到使用递归和循环来实现斐布拉数,自己动手写了一个小程序测了一下,感觉他们之间的性能相差还是蛮大。下面将程序贴在这里,然后分析一下原因,希望对大家日后编程有所帮助,有不当的地方,也请大家指出来,共同进步。

下面是javascript实现的

/*递归实现,代码简单,易懂*/

function fib(n)

{
  if(n == 1 || n == 0) return 1; 

  return fib(n-1)+fib(n-2);
}
  
/*使用循环实现,初看起来有点麻烦*/

function fib2(n)
{
  if(n==1 || n==0 ) return 1;

  var t1 = 1;

  var t2 = 1;

  var t3 = 0;
  for(var i = 2; i <= n; i++)
  {
    t3 = t1 + t2;
    t1 = t2;
    t2 = t3;
  }

  return t3;
}

 

正如上面的注释所言,使用递归的方式,看起来一目了然;但是当程序运行起来的时候,且要重复计算很多次,不仅如此,程序还占用大量的临时存储空间。而后面的程序不仅使用的内存空间较少,计算的也比较少。

这个程序计算50以上的值,第一种就会很慢,这里,简单的给一个对比结果,:

这里n=30;

使用递归得到的结果

使用循环的结果

 

posted @ 2010-07-24 21:43  库从志  阅读(320)  评论(0编辑  收藏  举报