C 循环与递归实现整数幂函数
题目: 函数power()的功能是返回一个double类型数的某个正整数次幂。现在改进该函数,使其能正确地计算负幂。同时,用该函数实现0的任何次幂为0,并且任何数值的0次幂为1。使用循环的方法编写该函数并在一个程序中测试它。
递归在C 关于递归中讲过了一些知识,但是在写的时候我还是遇到了一些麻烦,而普通的循环却比较好想。
先来看看普通的版本:
1#include <stdio.h>
2
3double power(double n, double p);
4
5int main(void)
6{
7 double n, p;
8
9 printf("Please input the number you need to power: ");
10 scanf("%lf", &n);
11 printf("Please input the number of power:");
12 scanf("%lf", &p);
13
14 printf("The answer is %f", power(n, p));
15 return 0;
16}
17
18double power(double n, double p)
19{
20 int i;
21 double pow = 1.0;
22
23 if (n == 0)
24 pow = 0;
25 if (p == 0)
26 pow = 1;
27 else if (p < 0)
28 for (i = 1; i <= -p; i++)
29 pow /= n;
30 else if(p > 0)
31 for (i = 1; i <= p; i++)
32 pow *= n;
33 return pow;
34}
35
然后看看递归是怎么搞的:
1#include <stdio.h>
2
3double power(double n, double p);
4
5int main(void)
6{
7 double n, p;
8
9 printf("Please input the number you need to power: ");
10 scanf("%lf", &n);
11 printf("Please input the number of power:");
12 scanf("%lf", &p);
13
14 printf("The answer is %f", power(n, p));
15 return 0;
16
17}
18
19double power(double n, double p)
20{
21 if (n == 0)
22 return 0;
23 if (p == 0)
24 return 1;
25 else if (p > 0)
26 return n * power(n, p - 1);
27 else if (p < 0)
28 return power(n, p + 1) / n ;
29}
30
递归的代码行数更少,看着挺好的,但是思考的时候就感觉略有压力了,再次之前,我没有写过递归的函数,因为不会,这次努力的想了一下,发现递归是从根部开始思考的,因为是一个个函数排下去的,所以其实是从p==0
开始运行的。return 1,然后一直运算到*n截止,这样思考就能得出答案了。
评论 (0)