0

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

3 に答える 3

4

値を返す場所powerは、ここだけe==0です。

他の場合は値を計算しますが、決して返しません。

于 2012-04-24T18:48:06.680 に答える
3

返品を忘れました。コンパイラの警告をオンにすると、文句が表示されます。

于 2012-04-24T18:47:57.350 に答える
1

あなたは時期尚早に答えを受け入れたかもしれません。コードにはまだ問題があり(2 ^ -3は.25を返します)、コードは非常に最適ではありません。1.000001 ^ 1000000を簡単に計算できるはずですが(eに非常に近い)、約100万のスタック深度が必要なため、アルゴリズムはセグメンテーション違反になります。たとえば、a ^ 1024の計算は、1023ではなく10回の乗算で実行できます。

于 2012-04-24T23:40:01.470 に答える