我试图在不使用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;
}
答案 0 :(得分:4)
您从power
返回值的唯一地方是e==0
。
其他情况计算值,但永远不会返回它们。
答案 1 :(得分:3)
你忘记了回报。打开编译器警告,它会抱怨。
答案 2 :(得分:1)
您可能过早接受了答案。您的代码仍然存在问题(2 ^ -3返回.25)并且您的代码非常不理想。您应该能够轻松地计算1.000001 ^ 1000000(它非常接近 e ),但您的算法将是段错误的,因为它需要大约一百万的堆栈深度。例如,计算a ^ 1024只需10次乘法而不是1023次。