计算机算法设计的基本方法(3)

频道:六六互联 日期: 浏览:1213

计算机算法设计的基本方法(3)

递归法:

定义:指一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法

思想:通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

基本步骤:

例3-5:求N!

分析:

例3-5的N-S图:

例3-6:Hanoi(汉诺)塔问题:古代有一个梵塔,塔内有A、B、C共3个座,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上。在移动过程中可以利用B座。要求编程序输出移动盘子的步骤。(初始状态如下图)

递归法(例3-6)

分析:要从初始状态移动到目标状态,就是把每个圆盘分别移动到自己的目标状态。而问题的关键一步就是:首先考虑把编号最大的圆盘移动到自己的目标状态,而不是最小的,因为编号最大的圆盘移到目标位置之后就可以不再移动了,而在编号最大的圆盘未移到目标位置之前,编号小的圆盘可能还要移动,编号最大的圆盘一旦固定,对以后的移动将不会造成影响

  根据上面的分析,设要移动的盘子个数为 ,原问题是将原来A座上的 个盘按照两个要求移动到C座,用han(n,A,B,C)表示。具体过程如下:

递归法(例3-6)

例3-6的N-S图