1
0

19_recursion.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. * 示例19:递归(Recursion)
  3. * 功能:学习递归的概念,函数调用自身
  4. * 递归必须有终止条件,否则会无限循环
  5. */
  6. #include <stdio.h>
  7. // 递归计算阶乘:n! = n * (n-1) * ... * 1
  8. // 例如:5! = 5 * 4 * 3 * 2 * 1 = 120
  9. int factorial(int n) {
  10. // 终止条件:当 n 为 0 或 1 时,返回 1
  11. if (n <= 1) {
  12. return 1;
  13. }
  14. // 递归调用:n! = n * (n-1)!
  15. return n * factorial(n - 1);
  16. }
  17. // 递归计算斐波那契数列
  18. // 斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21...
  19. // 每个数是前两个数之和
  20. int fibonacci(int n) {
  21. // 终止条件
  22. if (n <= 2) {
  23. return 1;
  24. }
  25. // 递归调用
  26. return fibonacci(n - 1) + fibonacci(n - 2);
  27. }
  28. // 递归计算 1 到 n 的和
  29. int sumToN(int n) {
  30. if (n <= 1) {
  31. return 1;
  32. }
  33. return n + sumToN(n - 1);
  34. }
  35. int main() {
  36. // 计算 5 的阶乘
  37. printf("5! = %d\n", factorial(5));
  38. // 计算 1 到 10 的和
  39. printf("1 + 2 + ... + 10 = %d\n", sumToN(10));
  40. // 打印斐波那契数列的前 10 项
  41. printf("\n=== 斐波那契数列前 10 项 ===\n");
  42. for (int i = 1; i <= 10; i++) {
  43. printf("%d ", fibonacci(i));
  44. }
  45. printf("\n");
  46. return 0;
  47. }