【问题标题】:Recursive Power Function递归幂函数
【发布时间】:2012-04-24 18:45:08
【问题描述】:

我正在尝试在不使用 math.h / pow() 的情况下编写递归幂函数,但我不断收到 -1.#IND 的垃圾值。我想我在调用 power 函数的新实例时遗漏了一些东西,但我不太明白如何绕过它。我的完整代码很短:

#include <iostream>
using namespace std;

double power(double b, int e){
    double x;

    if(e == 0){
        x = b;
    }
    else if(b == 0){
        x = 1;
        e = 0;
    }
    else if(e < 0){
        x = (1 / b) * power(b, ++e);
    }
    else{
        x = b * power(b, --e);
    }

    return x;
}

int main(){
    double num;
    int exp;

    cout << "Please Enter Your Number: ";
    cin >> num;

    cout << "Please Enter The Explonent: ";
    cin >> exp;

    cout << power(num, exp);
    cin >> num;
}

【问题讨论】:

  • 另外,我认为你的数学在负功率情况下是错误的。你应该做return 1 / (b * power(b, abs(e)--)
  • 对您的方法的一些想法:1.5 ^ 0 == 11.5 ^ x != 1.5 ^ -x0 ^ x != 1 ^ 0...
  • @Tejs: 嗯..,你的意思可能是pre decrement,而不是post decrement
  • 你应该告诉我们你得到错误的值是什么,从你的代码中它应该满足e的所有正值的终止条件,负值e的错误也是如此?
  • 我更新了我的数学,但我的负指数数学有点偏离,2^-3 返回 .25 而不是 .125,也许我需要 setw?

标签: c++ math recursion


【解决方案1】:

您从power 返回值的唯一位置是e==0

其他情况计算值,但从不返回它们。

【讨论】:

  • 每个函数只能有 1 个 return 语句:S - 我想当它在这么多次之后调用 power 函数时,e 将是 0,因此返回 b
  • @Derp 不,你可以在一个函数中有多个 return 语句
  • @Derp:在这种情况下,您需要在每个“分支”的正确变量中存入一个值,最后返回比值。
  • @Derp:如果你有这样一个愚蠢的规则,要么使用“returnValue”变量(并在最后返回它),要么使用三元运算符将你的 if 语句重写为表达式。
  • @Derp 如果你的老师不允许使用多个return-statements,你应该挑战他/她 - 或者考虑换一个老师。
【解决方案2】:

您忘记了退货。打开编译器警告,它会报错。

【讨论】:

    【解决方案3】:

    您可能过早地接受了答案。您的代码仍然存在问题(2^-3 返回 .25)并且您的代码非常不理想。您应该能够轻松计算 1.000001^1000000(它非常接近 e),但是您的算法会出现段错误,因为它需要大约一百万的堆栈深度。例如,计算 a^1024 可以只用 10 次乘法而不是 1023。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2015-08-05
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      相关资源
      最近更新 更多