共计 708 个字符,预计需要花费 2 分钟才能阅读完成。
C语言递归调用
1.定义
递归就是一个函数调用自身的过程。在递归中,函数通过直接或间接的方式调用自己,直到满足某个特定的条件也称基线条件时,停止递归。
例如计算 1+2+3+…n=?
- 问题可以分解为:sum(n) = n + sum(n – 1)
- 当进程的 n = 0 或 n = 1 时,返回结果。
2.两个关键部分
- 基线条件(Base Case):
- 基线条件就是递归最终终止的条件。
- 基线条件的意义是定义不再调用自身的最小问题规模,以输出最终结果。
- 若没有基线条件,递归就会陷入无限循环,最终导致程序崩溃。
- 递归关系(Recursive Case)
- 是一个公式或逻辑,它定义了如何将一个问题的解与其更小规模的子问题的解关联起来。
- 递归关系的目的在于通过不断缩小问题规模,将问题分解成更小的子问题,最终达到基线条件。
示例:求1+2+3+…+n的值的求和函数sum(n)
int sum(int n)
{
if(n == 1)
{
return 1; //基线条件
}
else
{
return (n + sum(n - 1)); //递归关系
}
}
3.递归调用的过程
以sum(3)
为例:
int result = sum(3);
调用过程:
sum(3)
调用sum(2)
:sum(2)
还没有结果,所以sum(3)
保持未完成状态。
sum(2)
调用sum(1)
:sum(1)
还没有结果,所以sum(2)
保持未完成状态。
sum(1)
到达最小值,也就是基线条件,返回值1。sum(2)
得到sum(1)
的值1,返回2+1=3。sum(3)
得到sum(2)
的值3,返回3+3=6。
递归调用过程结束,最终得到值6。在上面的过程中第1、2步只是向下调取结果值,第3步到达基线条件,开始返回结果值,第4、5步也是不断向上返回结果值的过程。
正文完