代码
#include <stdio.h>
void hanoi(int paraN, char paraSource, char paraDestination, char paraTransi) {
if (paraN <= 0) {
return;
}
else {
hanoi(paraN - 1, paraSource, paraTransi, paraDestination);
printf("%c->%c\r\n", paraSource, paraDestination);
hanoi(paraN - 1,paraTransi,paraDestination,paraSource );
}
}
void hanoiTest() {
printf("---- hanoiTest begins. ----\r\n");
printf("2 plates\r\n");
hanoi(2, 'A', 'B', 'C');
printf("3 plates\r\n");
hanoi(3, 'A', 'B', 'C');
printf("---- hanoiTest ends. ----\r\n");
}
void main() {
hanoiTest();
}
运行结果
---- hanoiTest begins. ----
2 plates
A->C
A->B
C->B
3 plates
A->B
A->C
B->C
A->B
C->A
C->B
A->B
---- hanoiTest ends. ----
代码说明
1.这是一个递归函数,用于移动paraN个盘子从paraSource柱子到paraDestination柱子,使用paraTransi作为辅助柱子。
2.如果paraN小于或等于0,函数直接返回,因为没有盘子需要移动
3.否则,它首先递归调用自己,将paraN-1个盘子从paraSource柱子移动到paraTransi柱子,让paraDestination作为辅助柱子
4.然后,它将剩余的一个盘子从paraSource柱子直接移动到paraDestination柱子
5.最后,它再次递归地调用自己,将paraN-1个盘子从paraTransi柱子移动到paraDestination柱子,使用paraSource作为辅助柱子