递归:是指函数或者程序在运行时直接或是间接的调用自身产生的重入现象。一般来说,递归相比于用非递归解法解决问题来说,思路清晰,代码量少,但是消耗的空间会较多。我会将递归理解为,将问题分割成一个个小的子问题,而我们只需要解出最简单的问题,并且了解各个问题之间的关系,让函数或是程序自己解决剩下的问题。下面有几道较为经典的递归例题:
1. 递归求 N 的阶乘
思路:求N的阶乘用普通的循环来做非常简单。如果是递归的话我们只需要清楚1!(1的阶乘)是多少,最后返回的是N * 函数名(N - 1),剩下的交给函数自己解决。
代码:
2. 递归求和,递归求 1 + 2 + 3 + ... + 10
思路:首先呢,我们需要自己计算最小的子问题,即 n=1的情况,就是从1加到1,也就是1。然后分成其他小的子问题交给函数自己处理,我们需要返回的是其之间的关系:加到10的话,返回10 + 函数名(10 - 1),加到n的话就返回n + 函数名(n - 1)。
代码: