1.什么是递归?
程序调用自身的编程技巧称为递归。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归程序设计是C++语言程序设计中的一种重要的方法,它使许多复杂的问题变得容易了。只是你需要花费一些时间去深刻理解。
2. 递归的作用
递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。
这类问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单,如Hanoi问题。
(3)数据的结构形式是按递归定义的。
如二叉树、广义表等,由于结构本身固有的递归特性,则它们的操作可递归地描述。
3.递归的一般形式:
void rec(形参列表)
{
if(test) return; //边界条件
//!!!注意!!! 递归一定要有边界条件!!!否则就会死循环!!!
rec(实参列表) //递归调用
语句序列2 //递归返回段(回溯)
}
!!!注意!!! 递归一定要有边界条件!!!否则就会死循环!!!
4.举个例子
阶乘
阶乘是递归的典型问题之一。
阶乘函数可递归地定义为&