杭州同济肝病医院:hanoi塔原理```不要代码.要求简单易懂``````C语言!

来源:百度文库 编辑:神马品牌网 时间:2024/04/30 14:18:51
hanoi塔原理```不要代码.要求简单易懂``````C语言!

既然不要代码,也不必“C语言”了。

一般采用递归的方法求解。

要把N个盘子从A经B移到C,可分为三步:
1、把(上面的)N-1个盘子从A(经C)移到B;
2、把(最底的)1个盘子从A移到C;
3、把(已移到B的)N-1个盘子从B(经A)移到C;

这里面1、3两步都涉及递归。用C语言描述(我不是学C语言的,语法不一定对)就是:

void MultiMove(int N, A, B, C) {
MultiMove(N-1, A, C, B);
SingleMove(A, C);
MultiMove(N-1, B, A, C);
}

当然这里没有终止条件,递归是无穷的。终止条件就是,当N=1时,就是移一个。所以上述代码就变成:

void MultiMove(int N, A, B, C) {
if (N > 1) {
MultiMove(N-1, A, C, B);
SingleMove(A, C);
MultiMove(N-1, B, A, C);
} else SingleMove(A, C);
}

这样就完善了。至于SingleMove这个函数,你自己去实现吧,无非就是一个printf语句(诸如“1 ==> 2”这种形式)。

不知说得清楚了没有。