ハノイの塔問題をC言語で解決するには
ハノイの塔の問題は、再帰的なアルゴリズムを使用して解決可能な典型的な再帰問題です。以下は C 言語を使用したハノイの塔の問題のサンプルコードです。
#include <stdio.h>
// 定义函数,实现汉诺塔问题的移动过程
void hanoi(int n, char A, char B, char C) {
if (n == 1) {
printf("将盘子从 %c 移动到 %c\n", A, C);
} else {
hanoi(n - 1, A, C, B);
printf("将盘子从 %c 移动到 %c\n", A, C);
hanoi(n - 1, B, A, C);
}
}
int main() {
int n;
printf("请输入盘子的数量:");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
上記のコードにおいて、hanoi関数は再帰的な手法を用い、n個の皿をA柱からC柱へ移す操作を実現しています。ここで、パラメータnは皿の数を表し、パラメータA、B、Cは3本の柱の番号を表します。関数の内部では、再帰の考えに基づき、問題を3つのステップに分解しています。
- n-1枚の円盤をA柱からB柱へ移す。
- 一番下の円盤をAの柱からCの柱に移動させる
- n-1 枚のディスクをポール B からポール C へ移動する。
最後に、main 関数で hanoi 関数を呼び出し、円盤の数や柱番号を与えることで、ハノイの塔問題を解くことができます。