汉诺塔递归实现代码:
核心思想:递归,分治
#include<stdio.h>
#include<stdlib.h>
void hanoi(int n, char pillarA, char pillarB, char pillarC);
int main()
{
//在main函数中,首先读取用户输入的汉诺塔层数,然后调用hanoi函数实现移动过程
int n;
printf("请输入汉诺塔的层数:");
scanf("%d", &n);
//若输入塔层小于1,则打印输出无效并退出程序
if(n < 1)
{
printf("Invalid enter!\nExit program.");
exit(0);
}
hanoi(n, 'A', 'B', 'C');
return 0;
}
/*
*这个程序中的hannoi函数是实现汉诺塔移动的核心函数。
*它的参数n表示汉诺塔的层数,pillarA、pillarB、pillarC表示三个柱子的名称。
*在hannoi函数中,每一次移动都会输出相应的移动过程。
*/
void hanoi(int n, char pillarA, char pillarB, char pillarC)
{
//函数的实现是递归的,当只有一个盘子时,直接将它从A柱移动到c柱
if (n == 1)
{
printf("%c -> %c\n", pillarA, pillarC);
}
//否则,将前n-1个盘子从A柱借助C柱移动到B柱,再将最后一个盘子从A柱移动到c柱,
//最后将前n-1个盘子从B柱借助A柱移动到c柱
else
{
hanoi(n - 1, pillarA, pillarC, pillarB);
printf("%c -> %c\n", pillarA, pillarC);
hanoi(n - 1, pillarB, pillarA, pillarC);
}
}
输入n = 3
运行结果: