ハノイの搭のプログラムの解釈について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
madou(超初心者)

ハノイの搭のプログラムの解釈について

#1

投稿記事 by madou(超初心者) » 18年前

突然ですいません、独学で勉強してるんですが、本に余り詳しく載ってなかったので
質問させてもらいます。
#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枚”で合ってるでしょうか?

box

Re:ハノイの搭のプログラムの解釈について

#2

投稿記事 by box » 18年前

> 最初の引数の解釈“//一番小さい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:ハノイの搭のプログラムの解釈について

#3

投稿記事 by madou(超初心者) » 18年前

諸事情により,大変失礼ですが,中傷が来そうで怖いので,名前変えてるんですが、
とても分かりやすい説明ありがとうございます。
これで納得して、次に進めそうです。
毎回ありがとうございます。
独学の身としては感謝しきれないほど、感謝(重宝)してます。

閉鎖

“C言語何でも質問掲示板” へ戻る