递归的本质:
把一件事分解为若干性质一样的事件来做(每一件事的范围不一样),最终不能在分解的时候就是这个递归的出口 。
递归分为两部分: 分解问题 和 求解问题
分解问题:
工具:递归式子递归调用自身。
对工具的说明:每一级调用时递归变量(可以类比循环变量)是有规律变化的,在每次递归调用时都会形成一个新的代码块,同时把这个代码块压入栈(这个栈是由系统所维护的,我们一般用户不必太过关注)。在到递归出口时,分解问题步骤完成。递归出口是递归变量取某一个极限值时(主要考虑这个递归变量是否满足进入递归的条件)。
求解问题:
分解问题的最后一步,到达了递归出口(也称为递归边界),这里得到一个最基本值。把最后一个压入栈的代码块弹出栈,这个代码块可以根据最基本的值又计算出一个新的值。这这样一步一步的把栈顶的元素(上文的代码块)弹出栈、再和上一个出栈运算出来的返回值再计算出一个返回值,就这样一步一步最终需要求的值。