C言語でハノイの塔を実装する方法は何ですか。
C言語では、ハノイの塔の問題を再帰を使って実装することができます。以下はその実装例です。
#include <stdio.h>
void hanoi(int n, char from, char to, char aux) {
if (n == 1) {
printf("Move disk 1 from %c to %c\n", from, to);
return;
}
hanoi(n - 1, from, aux, to);
printf("Move disk %d from %c to %c\n", n, from, to);
hanoi(n - 1, aux, to, from);
}
int main() {
int n;
printf("Enter the number of disks: ");
scanf("%d", &n);
hanoi(n, 'A', 'C', 'B');
return 0;
}
このプログラムは、ハノイの塔を実行する再帰関数hanoiを使用しています。この関数は、n(移動するディスクの数)、from(開始柱)、to(目標柱)、aux(補助柱)の4つのパラメータを受け取ります。
再帰の終了条件は、nが1の場合、直接、皿を元の柱から目標の柱に移動します。そうでない場合、n-1個の皿を最初の柱から補助柱に移動し、最後の1つの皿を最初の柱から目標の柱に移動させ、最後にn-1個の皿を補助柱から目標の柱に移動させます。
main関数では、ユーザーが移動させたい円盤の数を入力し、その後hanoi関数を呼び出して移動操作を実行します。
注意:上記のコードはサンプルであり、入力の検証やエラー処理は行われておりません。実際のアプリケーションでは、入力の有効性とエラー処理を考慮する必要があります。