算法中的递归还是一个比较难理解的知识点,为什么呢,因为递归的流程很难按大脑易理解的流程一步步的走一遍,尤其是涉及多个递归条件的。
递归三要素:
1、可分解,大问题可以分解成几个小问题
2、有规律,只跟规模有关,求解思路相同
3、能终止,最后有个终止条件
举例说明:
如黄金分割数列:
f(n) = f(n-1) + f(n-2)
分解成了两个小问题
从3开始,一直遵循当前数等于前一个数值加前前个数值。
当n为2或1时,既为终止条件。
技巧:
1、找到n和已知条件的规律,如例子中的n-1 + n -2。
2、列出终止条件附近的数字结果,像总结数学规律一样总结规律,得出递推公式。
注意:
注意递归太深导致堆栈溢出
递归可能导致较多重复计算,可以通过散列表辅助,把已经计算过的存起来复用。
总结:
递:通过一定的规律,逐步放出去的过程
归:通过对每次计算结果的计算累计收回来的过程。