第1页共16页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共16页函数的递归调用与分治策略递归方法是算法和程序设计中的一种重要技术
递归方法即通过函数或过程调用自身将问题转化为本质相同但规模较小的子问题
递归方法具有易于描述和理解、证明简单等优点,在动态规划、贪心算法、回溯法等诸多算法中都有着极为广泛的应用,是许多复杂算法的基础
递归方法中所使用的“分而治之”的策略也称分治策略
递归方法的构造构造递归方法的关键在于建立递归关系
这里的递归关系可以是递归描述的,也可以是递推描述的
下面由一个求n的阶乘的程序为例,总结出构造递归方法的一般步骤
[例1]从键盘输入正整数N(0n;coutn;cout>>endl>>fibonacci(n);}[例3]Hanoi塔问题
[问题描述]在霍比特人的圣庙里,有一块黄铜板,上面插着3根宝石针(分别为A号,B号和C号)
在A号针上从下到上套着从大到小的n个圆形金片
现要将A针上的金片全部移到C针上,且仍按照原来的顺序叠置
移动的规则如下:这些金片只能在3根针间移动,一次只能一片,且任何时候都不允许将较大的金片压在较小的上面
从键盘输入n,要求给出移动的次数和方案
[分析]由金片的个数建立递归关系
当n=1时,只要将唯一的金片从A移到C即可
当n>1时,只要把较小的(n-1)片按移动规则从A移到B,再将剩下的最大的从A移到C(即中间“借助”B把金片从A移到C),再将B上的(n-1)个金片按照规则从B移到C(中间“借助”A)
本题的特点在于不容易用数学语言写出具体的递归函数,但递归关系明显,仍可用递