#include <stdio.h> int f1(int n) { if(n == 1) return 1; else return f1(n-1) + n; } int f2(int n) { switch(n){ case 1: case 2: return 1; default: return f2(n-1) + f2(n-2); } } void f3(int n) { printf("%d", n%10); if(n/10 !=0) f3(n/10); } void f4(int n) { if(n/10 != 0) f4(n/10); printf("%d", n%10); } main() { printf("%d\n", f1(4)); printf("%d\n", f2(4)); f3(123); printf("\n"); f4(123); printf("\n"); }
时间: 2024-01-06 20:05:06 浏览: 129
#include <stdio.h>
这段代码使用了递归来实现三个不同的功能,分别是:
1. 计算 f1(n) = f1(n-1) + n,其中 f1(1)=1,即求 1+2+3+...+n 的和。
2. 计算斐波那契数列的第 n 个数,其中 f(1)=1,f(2)=1,f(n) = f(n-1) + f(n-2)。
3. 将一个整数的各位数字倒序输出,如 123 输出为 321。
整个程序的执行过程如下:
1. 调用 f1(4),由于 n 不等于 1,继续递归调用 f1(3)。
2. 调用 f1(3),继续递归调用 f1(2)。
3. 调用 f1(2),继续递归调用 f1(1)。
4. 调用 f1(1),返回 1。
5. 回到 f1(2),计算 f1(2) = f1(1) + 2,返回 3。
6. 回到 f1(3),计算 f1(3) = f1(2) + 3,返回 6。
7. 回到 f1(4),计算 f1(4) = f1(3) + 4,返回 10。
8. 调用 f2(4),由于 n 大于 2,继续递归调用 f2(3) 和 f2(2)。
9. 调用 f2(3),继续递归调用 f2(2) 和 f2(1)。
10. 调用 f2(2) 和 f2(1),返回 1。
11. 回到 f2(3),计算 f2(3) = f2(2) + f2(1),返回 2。
12. 回到 f2(4),计算 f2(4) = f2(3) + f2(2),返回 3。
13. 调用 f3(123),输出 3,2,1。
14. 调用 f4(123),输出 1,2,3。
15. 程序结束。
阅读全文