回值为6*4=24,最后返回值ff(5)为24*5=120。
例5. 9也可以不用递归的方法来完成。如可以用递推法,即从1开始乘以2,再乘以3…直到n。递推法比递归法更容易理解和实现。但是有些问题则只能用递归算法才能实现。典型的问题是Hanoi塔问题。
[例5.10]Hanoi塔问题
一块板上有三根针,A,B,C。A针上套有64个大小不等的圆盘, 大的在下,小的在上。如图5.4所示。要把这64个圆盘从A针移动C针上,每次只能移动一个圆盘,移动可以借助B针进行。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。求移动的步骤。
本题算法分析如下,设A上有n个盘子。
如果n=1,则将圆盘从A直接移动到C。
如果n=2,则:
1.将A上的n-1(等于1)个圆盘移到B上;
2.再将A上的一个圆盘移到C上;
3.最后将B上的n-1(等于1)个圆盘移到C上。
如果n=3,则:
步骤如下:
(1)将A上的n`-1(等于1)个圆盘移到C上,见图5.5(b)。
(2)将A上的一个圆盘移到B,见图5.5(c)
(3)将C上的n`-1(等于1)个圆盘移到B,见图5.5(d)
B. 将A上的一个圆盘移到C,见图5.5(e)
C. 将B上的n-1(等于2,令其为n`)个圆盘移到C(借助A),
步骤如下:
(1)将B上的n`-1(等于1)个圆盘移到A,见图5.5(f)
(2)将B上的一个盘子移到C,见图5.5(g)
(3)将A上的n`-1(等于1)个圆盘