#include <stdio.h>
// 递归函数计算阶乘
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
递归函数执行过程
- 初始调用:当调用
factorial(n)
时,首先检查n
是否为0或1。如果是,则直接返回1,因为0! 和 1! 都等于1。
- 递归调用:如果
n
大于1,则函数会进行递归调用factorial(n - 1)
。这意味着函数会不断调用自身,每次将n
减1,直到n
等于0或1。
- 返回值计算:每次递归调用返回时,会将当前的
n
与factorial(n - 1)
的返回值相乘,最终得到n!
的结果。
注意事项
- 递归终止条件:递归函数必须有一个明确的终止条件,否则函数会无限递归,导致栈溢出错误。在上述代码中,
n == 0 || n == 1
就是终止条件。
- 栈空间使用:每次递归调用都会在栈上分配空间,对于较大的
n
,可能会耗尽栈空间。可以考虑使用迭代方式(循环)替代递归,以避免栈溢出问题。
- 性能问题:递归函数由于函数调用开销和栈操作,可能在性能上不如迭代实现,尤其是在处理大数据时。