一个递归的程序有问题,求指正
各位前辈,我做了个用递归求一个数整数次幂的程序,但总是运行结果不对,麻烦各位指正,多谢!
#include <stdio.h>递归 c
#include <math.h>
double xpow(double, int); //求幂函数
int main(void)
{
int pow;
double base, ans;
printf("Enter a number and an integer power to which the number will be raised. Enter q to quit.\n");
while(scanf("%lf%d", &base, &pow) == 2) //输入底数和指数
{
ans = xpow(base, pow); //调用求幂函数
printf("\n%.3g to the power %d is %.5g\n", base, pow, ans);
printf("Enter the next pair of numbers or q to quit.\n");
}
printf("\nHope you enjoyed this power trip -- bye!\n");
return 0;
}
double xpow(double base, int power)
{
double powval = 1.0;
if(base == 0)
return 0; //底为0,幂为0,暂不考虑底和指数皆为0,幂值无效的情况
else if(power == 0)
return 1;
else
{
if(abs(power) == 1) //递归入口,先用abs()函数统一正负指数
powval = base;
if(abs(power) >= 1) //递归结束条件
powval *= xpow(base, (abs(power) - 1)); //递归调用
if(power > 0)
return powval; //指数为正整数返回幂值
else
return 1/powval; //指数为负数时返回正整数指数次幂的倒数
}
}
double fun(double fNum ,int n)
{
if ( n == 0)
{
return 1;
}
return (fun(fNum ,n - 1) * fNum);
}
int main(int argc, _TCHAR* argv[])
{
cout << fun(-10, 2) << endl;
return 0;
}
double xpow(double base, int power)
{
double powval = 1.0;
if(base == 0)
return 0; //底为0,幂为0,暂不考虑底和指数皆为0,幂值无效的情况
else if(power == 0)
return 1;
else
{
if(power > 0)
return base * xpow(base, power - 1);
else
return 1.0 / base * xpow(base, power + 1);
}
}
powval =base* xpow(base, (abs(power) - 1));