Day6C语言前期阶段练习之汉诺塔问题
递归思维要点
理解汉诺塔递归的关键:
分解问题:将n个盘子的问题分解为:
移动n-1个盘子
移动1个最大的盘子
再移动n-1个盘子
基本情况:当只有一个盘子时,直接移动。
#include <stdio.h>// 汉诺塔递归函数
void hanoi(int n, char from, char to, char aux) {// 基本情况:只有一个盘子时,直接移动if (n == 1) {printf("将盘子 %d 从 %c 移动到 %c\n", n, from, to);return;}// 递归步骤:// 1. 将n-1个盘子从起始柱移动到辅助柱hanoi(n - 1, from, aux, to);// 2. 将最大的盘子从起始柱移动到目标柱printf("将盘子 %d 从 %c 移动到 %c\n", n, from, to);// 3. 将n-1个盘子从辅助柱移动到目标柱hanoi(n - 1, aux, to, from);
}int main() {int n;printf("请输入汉诺塔的盘子数量: ");scanf("%d", &n);printf("汉诺塔的移动步骤:\n");hanoi(n, 'A', 'C', 'B'); // A是起始柱,C是目标柱,B是辅助柱getchar();return 0;
}