CodeSky 代码之空

随手记录自己的学习过程

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

2014-04-05 19:03分类: C评论: 0

题目: 函数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)