第七章——函数 第四节——函数的递归调用

第七章——函数 第四节——函数的递归调用

亓翎_Re-Tikara Lv5

递归调用的定义

  函数直接或间接的调用自身叫函数的递归调用。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>

// 递归函数:计算n的阶乘
int factorial(int n) {
// 终止条件:当n为0或1时直接返回1
if (n == 0 || n == 1) {
return 1; // 基本情况:0! = 1! = 1
} else {
// 递归调用:n! = n * (n-1)!
// 程序执行路径分解(以n=3为例):
// 1. factorial(3) -> 3 * factorial(2)
// 2. factorial(2) -> 2 * factorial(1)
// 3. factorial(1) -> 返回1(触发终止条件)
// 4. 回溯计算:2*1=2 -> 3*2=6
return n * factorial(n - 1);
}
}

int main() {
int num = 5; // 设置输入数值

// 调用递归函数并输出结果
// 执行过程分解:
// factorial(5) -> 5 * factorial(4)
// -> 5 * 4 * factorial(3)
// -> 5 * 4 * 3 * factorial(2)
// -> 5 * 4 * 3 * 2 * factorial(1)
// -> 5 * 4 * 3 * 2 * 1 = 120
printf("Factorial of %d is %d\n", num, factorial(num));

return 0;
}

流程展示

流程展示

几点说明

  • C编译系统对递归函数的自调用次数没有限制
  • 每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、返回值等信息,所以递归次数过多,可能引起堆栈溢出
  • 标题: 第七章——函数 第四节——函数的递归调用
  • 作者: 亓翎_Re-Tikara
  • 创建于 : 2026-02-07 02:21:28
  • 更新于 : 2026-02-07 02:26:19
  • 链接: https://re-tikara.fun/Blog/posts/c0079169/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
目录
第七章——函数 第四节——函数的递归调用