递归是一种较为特殊的算法,简单来说,“函数”(或者说子程序)不只是能够被其他函数调用(或者引用)的程序单元,在某些语言中函数提供了调用自己的功能,这种功能就是所谓的“递归”。
递归的定义
假如一个函数或者子程序是由自身所定义和调用的,就称为递归。递归至少要定义两种条件:一个是可以反复执行的递归过程,另一个是跳出执行过程的出口。
递归的分类
根据递归调用对象的不同,可以把递归分为以下两种:
1)直接递归:在递归函数中允许直接调用该函数本身
2)间接递归:在递归函数中如果调用其他递归函数,再从其他递归函数调用回原来的递归函数
递归通常用来解决结构自相似的问题。所谓结构自相似,是指构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决。具体地,整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法;第二部分与原问题相似,但比原问题的规模小。实际上,递归是把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的问题,直至每个小问题都可以直接解决。因此,递归有两个基本要素:
(1)边界条件:确定递归到何时终止,也称为递归出口。
(2)递归模式:大问题是如何分解为小问题的,也称为递归体。递归函数只有具备了这两个要素,才能在有限次计算后得出结果
在递归函数中,调用函数和被调用函数是同一个函数,需要注意的是递归函数的调用层次&