C 循环与递归实现整数幂函数

题目:

函数power()的功能是返回一个double类型数的某个正整数次幂。现在改进该函数,使其能正确地计算负幂。同时,用该函数实现0的任何次幂为0,并且任何数值的0次幂为1。使用循环的方法编写该函数并在一个程序中测试它。

递归在C 关于递归中讲过了一些知识,但是在写的时候我还是遇到了一些麻烦,而普通的循环却比较好想。

先来看看普通的版本:

#include <stdio.h>

double power(double n, double p);

int main(void)
{
    double n, p;

    printf("Please input the number you need to power: ");
    scanf("%lf", &n);
    printf("Please input the number of power:");
    scanf("%lf", &p);

    printf("The answer is %f", power(n, p));
    return 0;
}

double power(double n, double p)
{
    int i;
    double pow = 1.0;

    if (n == 0)
        pow = 0;
    if (p == 0)
        pow = 1;
    else if (p < 0)
        for (i = 1; i <= -p; i++)
            pow /= n;
    else if(p > 0)
        for (i = 1; i <= p; i++)
            pow *= n;
    return pow;
}

然后看看递归是怎么搞的:

#include <stdio.h>

double power(double n, double p);

int main(void)
{
    double n, p;

    printf("Please input the number you need to power: ");
    scanf("%lf", &n);
    printf("Please input the number of power:");
    scanf("%lf", &p);

    printf("The answer is %f", power(n, p));
    return 0;

}

double power(double n, double p)
{
    if (n == 0)
        return 0;
    if (p == 0)
        return 1;
    else if (p > 0)
        return n * power(n, p - 1);
    else if (p < 0)
        return power(n, p + 1) / n ;
}

递归的代码行数更少,看着挺好的,但是思考的时候就感觉略有压力了,再次之前,我没有写过递归的函数,因为不会,这次努力的想了一下,发现递归是从根部开始思考的,因为是一个个函数排下去的,所以其实是从p==0开始运行的。return 1,然后一直运算到*n截止,这样思考就能得出答案了。

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 源码, 代码段, 题目

添加新评论