一、递归的概念

  • 在程序中函数直接或间接调用自己。
  • 就递归而言最重要的就是跳出结构,因为跳出了才可以有结果。

二、递归的思想

将一个问题由难化易,由繁化简,由复杂化简单的过程称为化归,它是转化和归结的简称。

递归思想就是将一个问题转换为一个已解决的问题来实现。

三、递归的介绍

函数的递归就是在函数中调用自身,看一个简单的例子:

function fun(n) {
    ...
    fun(n-1);
}

为了理解递归在理论上是如何工作的,我们先举一个与代码无关的例子。想象一下,你是一家公司的话务员。由于这是一家业务繁忙的公司,你的座机连接多条线路,因此你可以同时处理多个电话。每条线路对应接收器上的一个按钮,当有来电时,该按钮将闪烁。今天当你到达公司开始工作时,发现有四条线路对应的按钮正在闪烁,所以你需要接听所有这些电话。

你接通线路一,并告诉他“请稍等”,然后你接通线路二,并告诉他“请稍等”,接着,你接通线路三,也告知他“请稍等”,最后,你接通线路四,并与其通话。当你结束了与线路四的通话之后,你回过头来接通线路三,当你结束了与线路三的通话之后,你接通线路二,结束之后,你再接通线路一,当与线路一的这位客户结束通话后,你终于可以放下电话了。

这个例子中的每一通电话就像某函数中的一个递归调用。当你接到一个电话且不能立即处理时,这个电话将被搁置;当你有一个不需要立即触发的函数调用时,它将停留在调用栈上。当你可以接听一个电话时,这个线路会被接通;当你的代码能够触发一个函数调用时,它会从调用栈中弹出。在你看到之后的代码案例有些发懵时,请回想一下这个比喻。