【汉诺塔游戏-C语言函数递归实现实现】

x y z 三根柱子 若x上只有一个盘a,则直接将盘a从x移到z,x->z。

若x上只有两个盘a,b,现将a盘移到y,然后将b盘移到z,再将a盘从y移到z,a:1 x->y,b:2 x->z,a:3 y->z。 若x上只有三个盘a,b,c: 总结规律: 当有n个盘时可将n个盘看成1和n-1两个盘,先借助目标柱子柱子(z)将n-1个盘移到第三根柱子(第一次是y)上,然后将1从原柱子(第一次是x)转移到目标柱子(z)上,然后将在第三根柱子(y)上的n-1又分成1和n-2,又进行相同的操作,直到所有的圆盘都放在了z柱上。

代码: #include<stdio.h> void move(char pos1,char pos2) { printf(" %c->%c ", pos1, pos2); }

void hanoi(int n, char pos1, char pos2, char pos3) { if (n == 1) { move(pos1, pos3); } else { hanoi(n - 1, pos1, pos3, pos2); move(pos1, pos3); hanoi(n - 1, pos2, pos1, pos3); } } int main() { printf(“请输入盘子数 ”); int n = 0; scanf("%d", &n); hanoi(n, ‘X’, ‘Y’, ‘Z’);

return 0;

}

经验分享 程序员 微信小程序 职场和发展