C++算法程序整理——递归算法
递归算法 递归,定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。 一般来说,能够用递归解决的问题应该满足以下三个条件: 需要解决的问题可以转化为一个或多个同构(或同样性质的)子问题来求解,而这些子问题的求解方法与原问题完全相同,只是在数量规模上不同。 递归调用的次数必须是有限的。 必须有结束递归的条件来终止递归。 什么情况下使用递归: 定义是递归的,如n!,Fibonacci数列等,求解这类问题可将其递归定义直接转换成对应的递归算法。 数据结构(如树,单链表等)是递归的。结构体中的指针指向了自身的类型,是一种递归的数据结构。对于这类递归结构,采用递归的方法编写算法既方便,又高效。 问题的求解方法是递归的, 如 Hanoi 问题的求解。 递归模型,递归模型是递归算法的抽象,它反映了一个递归问题的递归结构。以求解n!为例,其递归模型如下: fun(1) = 1 (1) fun(n) = n*fun(n-1) n > 1 (2) 递归模型一般由 递归出口 和 递归体 组成。 递归出口 给出了递归的终止条件, 递归体 给出了 fun(n) 的值与 fun(n-1) 的值之间的联系。 递归算法的执行过程, 一个正确的递归程序虽然每次调用的是相同的子程序,但它的参量、输入数据等均有变化。 在正常的情况下,随着调用的不断深入,必定会出现调用到某一层的函数时