1.递归的基本思想
- 所谓递归,就是有去有回。
- 递归的基本思想,是把规模较大的一个问题,分解成规模较小的多个子问题去解决,而每一个子问题又可以继续拆分成多个更小的子问题。
- 最重要的一点就是假设子问题已经解决了,现在要基于已经解决的子问题来解决当前问题;或者说,必须先解决子问题,再基于子问题来解决当前问题。
- 或者可以这么理解:递归解决的是有依赖顺序关系的多个问题。
我们假设一个抽象问题有两个时间点要素:开始处理,结束处理。那么递归处理的顺序就是,先开始处理的问题,最后才能结束处理。
假设如下问题的依赖关系:
- 【A】----依赖---->【B】----依赖---->【C】
- 我们的终极目的是要解决问题A,
- 那么三个问题的处理顺序如下:
- 开始处理问题A;
- 由于A依赖B,因此开始处理问题B;
- 由于B依赖C,开始处理问题C;
- 结束处理问题C;
- 结束处理问题B;
- 结束处理问题A。
2.从函数调用看广义递归
- 对于软件来说,函数的调用关系就是一个广义递归的过程,如下,
func_A()
{
func_B();
}
func_B()
{
func_C();
}
func_C()
{
/
}
- 调用函数A;
- 调用函数B