将n个圆盘从x柱,经由z柱中转,移到y柱(解出n层汉诺塔)时:
当n=0时,
不用做任何动作。
当n>0时,
首先,将n-1个圆盘从x柱,经由y柱中转,移到z柱(解出n-1层汉诺塔)。
然后,将1个圆盘从x柱移到y柱。
最后,将n-1个圆盘从z柱,经过x柱中转,移到y柱(解出n-1层汉诺塔)。
从以上步骤可知,为了解出n层汉诺塔,要使用“n-1层汉诺塔”的解法。
#include <stdio.h> #include <stdlib.h> // x:起点柱,y:目标柱,z:中转柱 void moveDisks(int n, char x, char y, char z) { if(n == 0) { // 什么也不做 } else { // 将n-1个圆盘,从x柱,经由y柱中转,移到z柱 moveDisks(n-1, x, z, y); printf("Move disk %d : from %c to %c ", n, x, y); // 从x柱移到y柱 // 将n-1个圆盘,从z柱,经由x柱中转,移到y柱 moveDisks(n-1, z, y, x); } } int main(void) { int n; printf("Enter number of disks: "); scanf("%d", &n); printf("The moves are: "); moveDisks(n, 'A', 'B', 'C'); return 0; }