递归算法改进---fibonaci 函数

采用一个表代替递归

/**
 *Compute Fibonaci numbers
 * f(0)=1, f(1)=1
 * f(n)= f(n-1)+ f(n-2);
 *程序效率低下,运行时间也是T(N) 成指数级增长
 */
public static int fib( int  n)
{
   if(n<= 1)
      return 1;
   else
      return fib(n-1)+ fib(n-2);
}

/*
 *用一个表代替递归
 *O(N)算法
 */
public static int fibonaci(int n)
{
   if(n<= 1)
      return 1;

   int last= 1;
   int nextToLast= 1;
   int answer= 1;

   for(int i=2; i<= n; i++)
   {
      //f(n)= f(n-1)+ f(n-2)
      answer= last+ nextToLast;
      nextToLast= last;
      last= answer;
   }
   return answer;
}

你可能感兴趣的:(算法,数据结构与算法分析)