汉诺塔递归
设三个柱子分别是X,Y,Z
分解步骤:
将前63个盘子从X移动到Y。
将最底下的第64个盘子从X移动到Z
将Y上的63个盘子移动到Z
具体分析:
将X上的63个盘子借助Z移动到Y
拆解:将前62个盘子从X移动到Z
将最底下的第63个盘子移动到Y
将Z上的62个盘子移动到Y
然后将Y上的63个盘子借助X移动到Z
拆解:将前62个盘子从Y移动到X
将最底下的第63个盘子移动到Z
将X上的62个盘子移动到Z
#include <stdio.h>
#pragma warning(disable:4996)
void hanoi(int n, char x, char y, char z);
void hanoi(int n, char x, char y, char z) {
if (n == 1) {
printf("%c -->%c\n", x, z);
}
else {
hanoi(n - 1, x, z, y);
//从X通过Z移动到Y
printf("%c -->%c\n", x, z);
hanoi(n - 1, y, x, z);
//从y通过x移动到z
}
}
int main(void) {
int n;
printf("请输入汉诺塔的层数:");
scanf("%d", &n);
hanoi(n, 'x', 'y', 'z');
return 0;
}