递归介绍
在C++语言中, 递归调用(recursive call)就是某一方法调用自身 。这种自我调用通常是直接的,即在函数体中包含一条或多条调用自身的语句。递归也可能以间接的形式出现,即某个方法首先调用其它方法,再辗转通过其它方法的相互调用,最终调用起始的方法自身。 递归的价值在于,许多应用问题都可简洁而准确地描述为递归形式。以操作系统为例,多数文件系统的目录结构都是递归定义的。具体地,每个文件系统都有一个最顶层的目录,其中可以包含若干文件和下一层的子目录;而在每一子目录中,也同样可能包含若干文件和再下一层的子目录;如此递推,直至不含任何下层的子目录。通过如此的递归定义,文件系统中的目录就可以根据实际应用的需要嵌套任意多层(只要系统的存储资源足以支持)。 以下将从递归的基本模式入手,循序渐进地介绍如何选择和应用( 线性递归、二分递归和多分支递归等 )不同的递归形式,以实现( 遍历、分治等 )算法策略,以及如何利用 递归跟踪和递推方程等方法分析递归算法的复杂度 。 一、线性递归 数组求和问题: 1 sum(int A[],int n) //传入的参数是数组长度 2 { 3 if (n < 1) //平凡情况:递归基 4 return 0; //直接计算(非递归式) 5 else //一般情况 6 return sum(A,n - 1) + A[n-1] ; //递归