首先汉诺塔是使用递归一个非常经典的例子,
历史故事说了也没用,我们想象原理。
前提,三根柱子ABC,将A上的盘子数按顺序挪到C,每次只能一个
1. 一个盘子,A->C
2. 两个盘子 A->B, A->C, B->C
3. 大于两个盘子,那我们先理解为上面一个盘子,下面n-1个盘子属于一个整体。
先移动第一个的A->C,那么我们在n-1(可以当成1个)需要先将A->B, 然后B->C,
即以下代码:
void hanoi(int n, char A, char B, char C) {
if (n == 1)
{
printf("Move sheet %d from %c to %c\n", n, A, C);
}
else{
hanoi(n - 1, A, C, B);
printf("Move sheet %d from %c to %c\n", n, A, C);
hanoi(n - 1, B, A, C);
}
}
int main(int argc, char* argv[])
{
int n;
while (1)
{
printf("input:");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
}
}