读书人

一个递归的程序有有关问题求指正

发布时间: 2013-03-28 10:20:24 作者: rapoo

一个递归的程序有问题,求指正
各位前辈,我做了个用递归求一个数整数次幂的程序,但总是运行结果不对,麻烦各位指正,多谢!

#include <stdio.h>
#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; //指数为负数时返回正整数指数次幂的倒数
}
}
递归 c
[解决办法]
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;
}

[解决办法]
xpow()函数写错了。应该是这样:

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));

读书人网 >C语言

热点推荐