首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

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

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

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

热点排行