1 #include <stdio.h> 2 void hanoi(int s,char a,char b,char c) //a是出发盘,b是中途盘,c是结束盘 3 { 4 if(s==0) return; 5 hanoi(s-1,a,c,b); //把最底下的从a借助c移动到b 6 printf("%d from %c move to %c ",s,a,c); 7 hanoi(s-1,b,a,c); //把刚才弄到b的借助a叠到c上 8 } 9 int main() 10 { 11 int s=5; //这里是盘子数,随便改,用scanf也可以 12 char a='A',b='B',c='C'; 13 hanoi(s,a,b,c); 14 return 0; 15 }
题目的话搜一下就好啦,到处都有的。
s=0的时候自然终止程序。
分析:
比如一个4阶的汉诺塔
1
2
3
4
a b c
第一步:把冰箱门打开
1
2
4 3
a b c
第二步:把大象放进去(在这一步输出步骤)
1
2
3 4
a b c
第三步:把冰箱门关上
1
2
3
4
a b c
然而把冰箱门打开和关上怎么做呢?这就是递归部分中调用自身的部分了。具体见代码吧!
双色的代码也如此,因为实际操作会发现,同种颜色的盘子叠在一起的情况是不存在的,所以代码一样。