假设要解决的汉诺塔共有N个圆盘,对A塔上的全部N个圆盘从小到大顺序编号,最小的圆盘为1号,次之为2号,依次类推,则最下面的圆盘的编号为N。 第一步:若A塔上只有一个圆盘,即汉诺塔只有一层,则只需将这个盘从A塔上移到B塔上即可; 第二步:对于一个有N(N>1)个圆盘的汉诺塔,将N个圆盘分成两部分:上面的N-1个圆盘和最下面的N号圆盘。解决N个圆盘的汉诺塔,可以按下面的方式进行操作: 1、将A塔上面的N-1个圆盘,借助B塔,移到C塔上; 2、将A塔上剩余的N号盘子移到B塔上; 3、将C塔上的N-1个盘子,借助A塔,移到B塔上。
程序如下: void move(char x,char y){ printf("%c-->%c\n",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); } }