# 递归 递归是一种设计和描述算法的有力工具。 也是回溯法和动态规划的基础。 递归算法执行过程分 `递推` 和 `回归` 两个阶段 在 `递推` 阶段,将大的问题分解成小的问题 在 `回归` 阶段,获得最简单问题的解后,逐级返回,依次得到稍微复杂情况的解,知道获得最终的结果 1) 确定递归公式 , 比如 斐波那契数列 问题中的 `fib(n)=fib(n-1)+fib(n-2)` 2) 确定边界条件 bad case > 自顶向下的递归,自底向上是迭代 递归运行效率较低,因为有函数调用的开销,递归多次也可能造成栈溢出。 ### 递归公式 [快排](../6%20Sort/README.md) ```Java void quicksort(int *a, int left, int right){ if (left