栈与递归

栈与递归

递归函数结构清晰,程序易读,而且其正确性容易得到证明

先分解后求解的策略为“分治法”,

“分治法”需要满足以下的三个条件
1.能够将一个问题转化为另一个新的问题,而新的问题与原问题的解法相同或类同,不同的是仅是处理的对象,而且这些对象更小且变化有规律
2.可以通过上述转化而使问题简化
3.必须有一个明确的递归出口,或递归的边界

“分治法”求解递归问题算法的一般形式:

void p{
	if(递归结束条件成立) 可直接求解;
	else p (较小的参数);
}

当递归结束,条件成立,只执行return操作时:

void p{	
	if(递归结束条件不成立) 
		p(较小的参数);
}

还有一类问题,虽然问题本身没有明显的递归结构,但用递归结构更简单,如Hanoi塔问题等

递归过程与递归工作栈

在高级语言编制的程序中,调用函数和被调函数之间的连接链接及信息交换通过栈来进行
当多个函数构成嵌套调用时,按照“后调用先返回”的原则,信息传递与信息控制转移必须通过“栈”来是实现,和每次调用相关的一个重要概念是递归函数运行的“层次”,系统应当设立一个“递归工作栈”作为整个递归函数运行期间使用的数据存储区,其中包括所有的实参、所有的局部变量,以及上一层的返回地址

分析递归函数的空间复杂度需要分析工作栈的大小

本文摘自数据结构P61~P68 侵删

你可能感兴趣的:(栈与递归,栈与递归)