构成递归需具备两个条件:
- 子问题须与原始问题为同样的事,且更为简单;
- 不能无限制地调用本身,须有个出口(即要有个边界),化简为非递归状况处理其中递归又分为直接递归和间接递归。
递归又分为两情况,分别为直接递归和间接递归。
- 直接递归是在A函数中嵌套使用A函数,然后有一个停止该函数的条件。
- 间接递归是在A函数中调用B函数,然后在B函数中调用A函数,即间接调用自己实现递归。
这里偶用著名的斐波那契数列(即从第3项起,后一个数为前两项之和)做演示:
运行得出第10项结果为34,结果正确。现在大家来分析其运行过程中,为方便理解,大家计算第5项,运行过程大家用如下图表示:
从图中大家可以看出,所谓递归,就是把大的事件,逐步细化分别进行处理,这就是分治的思想。
那么递归是在计算机中怎样实现的呢?如果大家有了解过数据结构这门课程,大家就会知道,这就是用栈来实现的。
还有一点值得注意的,大家看上图是不是有些相同的部分重复调用了,所以说使用递归会使程序变得相对慢一些,在日常开发中,大家是比较少用的,虽然递归的代码块看起来比较简洁。