递归幂函数

时间:2012-04-24 18:45:08

标签: c++ math recursion

我试图在不使用math.h / pow()的情况下编写递归幂函数,但我不断得到-1.#IND的垃圾值。当我呼吁使用电源功能的新实例时,我想我错过了一些东西,但我不太明白如何绕过它。我的完整代码很短:

#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;
}

3 个答案:

答案 0 :(得分:4)

您从power返回值的唯一地方是e==0

其他情况计算值,但永远不会返回它们。

答案 1 :(得分:3)

你忘记了回报。打开编译器警告,它会抱怨。

答案 2 :(得分:1)

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