题目(算法课第八课)
古代有一个梵塔,塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求输出移动的步骤 。
分析
递归。
划分为子问题。
步骤
所以整个步骤:
1.搬运n-1个碟子到中间针(from -> help)(递归)
2.搬运第n个碟子到目的针 (from -> to)
3.搬运中间针的n-1个碟子到目的针(help -> to)(递归)
递归调用只要有整体观念就行了,在写代码的过程中可以把移动n-1个塔
看作一步完成的
代码
1 | public class Hanoi { |
输出:
1 | 1号盘:A-->B |