Hanoi塔问题,这是一个古典的数学问题,是一个只有用递归方法解决的问题。问题是这样的:古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到C座,但每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在上,小盘在下。在移动过程中可以利用B座。
将n个盘子从A座移到C座可以分解为以下3个步骤:
(1).将A上n-1个盘借助C座先移到B座上;
(2).把A座上剩下的一个盘移到C座上;
(3).将B上n-1个盘借助A座先移到C座上。
程序如下:
#i nclude <stdio.h> void move(char x,char y) { static int i=0; printf(\"%3d.%c-->%c\\n\",++i,x,y); } void hanoi(int n,char one,char two,char three) { /* 将n个盘子从one座借助two座,移到three座 */ if(n==1) move(one,three); else { hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } } void main() { printf(\"输入盘子数(最好2~9之间):\"); scanf(\"%d\",&m); printf(\"移动%d个盘子的步骤为:\\n\",m); hanoi(m,\'A\',\'B\',\'C\'); } |
输入盘子数(最好2~9之间):3
移动3个盘子的步骤为:
1.A-->C
2.A-->B
3.C-->B
4.A-->C
5.B-->A
6.B-->C
7.A-->C