float pkt(float x, int n) {
float result;
if (n == 0) {
result = 1;
} else {
result = (pkt(x, n - 1) * x) + sqrt(x);
}
return result;
}
假设我插入4和2。 我想要算这样:
但结果是26而不是18。 公式为(x ^ n)+√x。
答案 0 :(得分:2)
你得到的是26,因为那是你的代码所要做的。
从pkt(4.0,0)
到pkt(4.0,1)
累积到pkt(4.0,2)
会产生
pkt(4.0,0) -> 1.0
pkt(4.0,1) -> pkt(4.0,0)*4.0 + sqrt(4.0) = 1.0*4.0 + 2.0 = 6.0
pkt(4.0,2) -> pkt(4.0,1)*4.0 + sqrt(4.0) = 6.0*4.0 + 2.0 = 26.0
没有递归,你的功能相当于
float pkt_no_recursion (float x, int n)
{
if (x == 1.0)
{
return float(n) + 1.0f;
}
else
{
float pow_x_n = std::pow(x,n);
float sqrt_x = std::sqrt(x);
return (pow_x_n*(x+sqrt_x) - (pow_x_n+sqrt_x)) / (x - 1.0f);
}
}
答案 1 :(得分:0)
如何定义函数sr
?这就是你追求的吗?可能会使用标准函数powerOf
替换powf
(如果需要,则递归powerOf
递归)。
float powerOf(float x, int n) {
float res = 1;
for (int i = 0; i < n; i++) {
res *= x;
}
return res;
}
float pangkat (float x, int n) {
return powerOf(x, n) + sqrtf(x);
}
答案 2 :(得分:0)
该函数将给出26
作为答案,因为在此声明中:
result = (pkt(x, n - 1) * x) + sqrt(x);
您返回result
作为您正在尝试的幂等式的sum
和sqrt
。每次返回结果时都会包含此sqrt
,而最终只需要它。
相反,将sqrt
移动到调用它的位置,而不是将其包含在每个递归调用中。
result = (pkt(x, n - 1) * x) ;
并将该函数调用为:
pkt(4,2)+ sqrt(4);