什么是递归?
任何函数调用自己都叫做递归,不管是直接的还是间接的,递归方法通过调用自己来解决一个问题的一部分。这就叫递归步骤。递归步骤一般会引发一系列的递归(当然了这是废话,不然就不叫做递归了)。这里面有一个重要的点就是要确保你的递归函数有个终止条件(不然的话就出不来了)。每一次的递归都是解决原问题的一个小问题,并且这个小问题是原问题的一个副本(像套娃一样,一层比一层小但是除了代销其他方面都很相似),一系列的小问题解决后必须能解决最终要解决的问题(也是废话,想看到套娃里面的东西,你要一层一层的打开看,最终才能看到里面是什么)。
为什么要用递归呢?
递归是从数学中借用的方法。因为有些问题用递归写出来的代码比循环代码要短小,一般来说,循环代码在编以或是解释后都回变成递归结构。对于可分成一系列相似的子任务的任务,递归使用起来就很方便了。例如:排序,搜索,遍历等问题都有相应的递归解决方法。
递归函数的格式
递归函数通过调用自己来解决一个任务的子任务。到某个点,函数遇到的子任务它再不需要调用自己就能解决的时候(类似打开到最后一层),这一层叫做base case,相应的前面的都要调用自己的子任务也有名字,叫做recursive case。下面句式递归函数的一般形式:
if( test for the base case ) return some base case value; else if( test for another base case ) return some other base case value; // the recursive case else return ( some work ) and then ( a recursive call )