突然ですいません、独学で勉強してるんですが、本に余り詳しく載ってなかったので
質問させてもらいます。
#include<stdio.h> //再帰関数の使い方
#include<stdlib.h>
void hanoi(int n,int a,int b,int c);
int main(void){
hanoi(3,'a','b','c');
return(EXIT_SUCCESS);
}
void hanoi(int n,int a,int b,int c){//一番小さい1~nまでのn枚:開始棒:目的棒:作業棒
if(n==1){//一番小さい円盤しかないのなら
printf("1の円盤を %c から %c に移す\n",a,b);
}else{
hanoi(n-1,a,c,b);
printf("%dの円盤を %c から %c に移す\n",n,a,b);
hanoi(n-1,c,b,a);
}
}
以上の途中にあるハノイ移動の
最初の引数の解釈“//一番小さい1~nまでのn枚”で合ってるでしょうか?ハノイの搭のプログラムの解釈について
-
madou(超初心者)
ハノイの搭のプログラムの解釈について
-
box
Re:ハノイの搭のプログラムの解釈について
> 最初の引数の解釈“//一番小さい1~nまでのn枚”で合ってるでしょうか?
正しいです。
なお、再帰の本体部分である
> hanoi(n-1,a,c,b);
> printf("%dの円盤を %c から %c に移す\n",n,a,b);
> hanoi(n-1,c,b,a);
は、こんな風に解釈するとわかりやすいかもしれません。
・aにある上からn-1枚を、cへ移す。bを作業用に使う。
・aに残っているいちばん大きい円盤を、bへ移す。
・cに移しておいたn-1枚を、bへ移す。aを作業用に使う。
・完成-
madou(超初心者)
Re:ハノイの搭のプログラムの解釈について
諸事情により,大変失礼ですが,中傷が来そうで怖いので,名前変えてるんですが、
とても分かりやすい説明ありがとうございます。
これで納得して、次に進めそうです。
毎回ありがとうございます。
独学の身としては感謝しきれないほど、感謝(重宝)してます。
とても分かりやすい説明ありがとうございます。
これで納得して、次に進めそうです。
毎回ありがとうございます。
独学の身としては感謝しきれないほど、感謝(重宝)してます。