#include <iostream>
using namespace ::std;
double Eval( int N ) //递归方法
{
int i;
double Sum;
if( N == 0 )
return 1.0;
else
{
Sum = 0.0;
for( i = 0; i < N; i++ )
Sum += Eval( i );
return 2.0 * Sum / N + N;
}
}
double iEval( int N ) //非递归方法
{
int i;
double Sum;
double left, right;
if( N == 0 )
return 1.0; //C0 = 1.0;
else if( N == 1 )
return 3.0; //C1 = 3.0;
else
{
Sum = 0.0;
left = 3.0; //左子节点
right = 1; //右子节点和
for( i = 2; i <= N; i++ )
{
Sum = 2.0 * (left + right) / i + i;
right = left + right;
left = Sum;
}
return Sum;
}
}
int main()
{
printf( "%f\n", Eval( 25 ) );
printf( "%f\n", iEval( 25 ) );
system( "PAUSE");
return 0;
}