递归是一种思想
在变成中的递归方法是调用自身的方法。
最简单的情况称为基础情况(base case)或终止条件(stopping condition)。
子问题和原始问题具有相同的性质,所以可以使用不同的参数调用这个方法,这称作递归调用(recursive call)
一个递归调用可以产生更多的递归调用,因为这个方法继续把每个子问题分解成新的子问题。要终止一个递归方法,问题最后必须达到一个终止条件。
如果递归不能使问题简单化并最终收敛到基础情况,就有可能出现无限递归。
调用自身的递归方法,被称为直接递归。而当方法A调用方法B,而方法B再调用方法A,间接递归就产生了。甚至有更多的方法参与到递归中来。
任何递归问题都可以用非递归的迭代解决。
递归有很多副作用:它耗费了太多时间并占用了太多内存。
但为什么还要用递归呢?因为在某些情况下,递归特有的问题很难用其他方法解决,而递归可以给出一个清晰、简单的解决方案。
迭代通常比递归效率高。
尾递归对于减小栈大小比较有效。