递归在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截止,这样思考就能得出答案了。
时间: 2024-09-25 22:49:09