汉诺塔问题
题目:
有n个圆盘,依半径大小(半径都不同),自上而下套在a柱上,每次只允许移动最上面一个盘子到另外的柱子上去(除a柱外,还有b柱和c柱,开始时这两个柱子上无盘子),但绝不允许发生柱子上出现大盘子在上,小盘子在下的情况,现要求设计将a柱子上的n个盘子搬移到c柱去的方法。
【算法分析】
①、当n=1时,只有一个盘子,把p1移动到另一根柱子上需要移动1次:a->c;
因为n=1时,需要把p1这一个盘子移到另一根柱子(c)需要移动1次
②、当n=2时,将p1和p2这两个盘子移动到另一根柱子上需要移动3次:a——1——>b,a——2——>c,b——3——>c;
因为n=2时,由①可知,
–把p1移动到另一根柱子(b)需要移动1次:a->b
–把p2移动到另一根柱子(c)上需要移动1次:a->c
–把p1移动到另一根柱子(c)上需要移动1次:b->c
大局观:把(n-1)个盘子看成一个整体,总目标为把N个盘子from a到c,先把(n-1)个盘子from a到b,然后第n个盘子from a到c,最后(n-1)个盘子from b到c
③、当n=3时,把p1、p2、p3这三个盘子移动到另一根柱子上需要移动7次:因为由②可知,
–将p1和p2这两个盘子移动到另一根柱子(b)上需要移动3次-
–将p3这个盘子移动到另一根柱子(c)只需1次
–将p1和p2这两个盘子移动到另一根柱子(c)上需要移动3次。
大局观:把(n-1)个盘子看成一个整体,总目标为把n个盘子from a到c(a为源柱,c为目标柱,b为过渡柱),先把(n-1)个盘子from a到b(c为过渡柱,a为源柱,b为目标柱),再把第n个盘子from a到