我想编程数学函数f(x)=sqrt(1^1+sqrt(2^2+sqrt(3^3)+...+sqrt(x^x)))
,x 应该在哪里1 <= x <= 10
。我试图像这样对函数进行编程:
double f1Rek(int x)
{
if( x < 1 ) return sqrt(power(x,x));
return sqrt(power(x,x) + f1Rek(x-1));
}
函数 power 也是一个自创的递归函数:
double power(int x, int n)
{
if( n == 0 ) return 1.0;
if( x == 0 ) return 0.0;
if( exp > 0 )
{
return n * power(n, exp - 1);
}
if( exp < 0 )
{
return 1 / ( n * power(n, -(exp-1));
}
}
问题在于f1Rek(int x)
函数,因为它以sqrt(x^x + sqrt( x-1^x-1...
. 如何以非常优雅的方式解决问题?
更新:
在 Jim Balter 的回答下,我创建了一个带有 2 个参数的函数:
double f2Rek(int i, int x)
{
if( i <= x )
{
return sqrt(power(i,i) + f2Rek(i+1, x));
}
else return 0.0;
}
是否有可能定义一个只有一个参数的递归函数。