/**求解递归关系
*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];
}
递归算法改进---表存储代替冗余递推
最新推荐文章于 2021-10-31 15:37:41 发布