递归问题——用分治法求解
分治法:对于一个较为复杂的问题,能够分解成几个相对简单的且解法相同或类似的子问题来求解
必备的三个条件
-
能将一个问题转变成一个新问题,而新问题与原问题的解法相同或类同,不同的仅是处理的对象,且这些处理对象是变化有规律的
-
可以通过上述转化而使问题简化
-
必须有一个明确的递归出口,或称递归的边界
分治法求解递归问题算法的一般形式:
void p(参数表)
if(递归结束条件) 可直接求解步骤; ——基本项
else P(较小的参数); ——归纳项
}
函数调用过程
-
调用前,系统完成:
-
将实参,返回地址等传递给被调用函数
-
为被调用函数的局部变量分配存储区
-
将控制转移到被调用函数的入口
-
-
调用后,系统完成:
-
保存被调用函数的计算结果
-
释放被调用函数的数据区
-
依照被调用函数保存的返回地址将控制转移到调用函数
-