递归算法改进---表存储代替冗余递推

来源:互联网 发布:java开发工作描述 编辑:程序博客网 时间:2024/05/01 06:57
/**求解递归关系 *Sum=C(0)+C(1)+...+C(N-1); 即求和运算 *C(N)=(2/N) Sum +N **/public static double eval( int n){   if (n == 0)      return 1.0;   else   {      duoble sum= 0.0;      for(int i= 0; i< n; i++)         sum += eval(i);//冗余递归调用      return 2.0* sum/n + n;   }}//用一个表代替//将前面的计算结果全部存储在c[] 数组中// 以O(N*N)运算public static double eval( int n){   double c[]= new double [n+1];   c[0]= 1.0;   for(int i= 1; i<=n; i++)   {      double sum= 0.0;      for(int j=0; j< i; j++)         sum+= c[j];    //但是对每一个i,j都是从0开始到i,还是重复计算了。      c[i]= 2.0 * sum/ i + i;   }   return c[n];}// 完美程序O(N)运算public static double eval(int n){   double c[]= new double [n+1];   c[0]= 1.0;   double sum= 0.0;   for(int i= 1; i<= n; i++)   {      sum += c[i-1];      c[i]= 2.0 * sum/ i+ i;   }   return c[n];}
0 0
原创粉丝点击