使用平方根C ++递归

时间:2015-06-02 11:54:27

标签: c++

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。

3 个答案:

答案 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作为您正在尝试的幂等式的sumsqrt。每次返回结果时都会包含此sqrt,而最终只需要它。

相反,将sqrt移动到调用它的位置,而不是将其包含在每个递归调用中。

result = (pkt(x, n - 1) * x) ;

并将该函数调用为:

pkt(4,2)+ sqrt(4);

An example