ID非公開
ID非公開さん
2020/11/23 22:05
3回答
C言語ハノイの塔について
C言語ハノイの塔について プログラムの動作がいまいち掴めないので簡単に解説して頂きたいです。 #include<stdio.h> void move(int no, int x,int y){ if(no>1) move(no-1,x,6-x-y); printf("円盤[%d]を%d軸から%d軸へ移動¥n",no,x,y); if(no>1) move(no-1,6-x-y,y); } int main(){ int n; printf("ハノイの塔¥n円盤の枚数:"); scanf("%d",&n); move(n,1,3); return 0; } 特に関数内の再帰部分の6-x-yの部分が分からないのですが、6という数字はどこから出てきたのでしょうか?
C言語関連・38閲覧・50
ベストアンサー
6-x-y の 6 は 1,2,3を足した数です。 1,2,3は棒の番号です。 ハノイの塔の考え方は移動前の棒番号から一時退避の番号へ移動後、一時退避から目的の番号への移動と言う2回の移動がセットになっています。 つまり、1番から2番へ移動するには3を経由する事になります。 6から移動前と移動後の2つを除いたもう一つが 6-x-y となるわけです。
1人がナイス!しています
この返信は削除されました
質問者からのお礼コメント
なるほど、棒の番号を足した数だったんですね… 他の方もありがとうございます。
お礼日時:2020/11/27 21:43