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截止,这样思考就能得出答案了。
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。