c
1#include <stdio.h> 2 3int count = 0; 4void move(int no, int x, int y){ 5 if (no > 1) 6 move(no - 1, x, 6 - x - y); 7 8 printf("[%d]を%d軸から%d軸へ移動\n", no, x, y); 9 count++; 10 11 if (no > 1) 12 move(no - 1, 6 - x - y, y); 13} 14 15int main(void) { 16 int n; 17 printf("円盤の枚数:"); 18 scanf("%d", &n); 19 20 move(n, 1, 3); 21 22 printf("%d回移動しました。\n", count); 23 return 0; 24}
上のコードはハノイの塔なのですが、この再帰を理解することができません。
本には「最も大きい円盤以外の円盤をグループとみなせば、円盤の枚数とは無関係に、まったく同じ手続きを実現できます。」と書いてありますが、漠然としていてよくわかりません。
どのように理解すればよいでしょうか?
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/24 23:02
2020/10/24 23:08
2020/10/24 23:26
2020/10/24 23:31
2020/10/24 23:32
2020/10/24 23:35