浅谈巧妙算法:递归(1)

2021.7.28

何为递归

递归是函数和过程调用自身的一种特殊形式,即允许函数和过程进行自我调用。其特点是抽象性和简洁性,很多时候可以大大降低时间复杂度,获得较优解。

如何选择和应用不同的递归

常见的有:线性递归,二分递归,多分枝递归等
下面进行逐一介绍…

1.线性递归:这种形式中,应用问题总可以分解为两个独立的子问题,即减而治之。通过将一个大问题不断分解成小问题,小问题分解为更小的问题…最终退化为简单问题。
eg:数组求和~计算给定n个数的总和

int sum(int A[], int n){
	if(n<1) //平凡情况
		return 0;//平凡情况,递归基
	else //一般情况
		return sum(A, n-1) + A[n-1];//递归:前n-1项之和,再累计第n-1项
}

*线性递归:算法sum()可能朝着更深一层进行自我调用,且每一递归实例对自身地调用最多一次。于是每一层次上最多有一个实例,且它们构成一个线性的次序关系,因而叫做线性递归。

递归算法最重要的是要保证其有穷性,其基本技巧:首先判断处理平凡情况(如n=0之类),以免因无限递归导致系统溢出。这类平凡的情况叫做

递归基
*平凡的情况可能有很多种,但至少会有一种,且必然出现。

*减而治之:此处sum函数随着递归深入,调用函数将单调地递减。因此无论输入n有多大,递归的调用总次数是有限的,故算法迟早终止,满足有穷性。当抵达递归基时,算法执行的是非递归计算。

你可能感兴趣的:(数据结构_THU系列教材,算法与数据结构,算法,数据结构)