えー聞くところが場違いかも知れませんが 教えてください。
再帰プログラムでメインクラス以外に2つ以上のクラスを再帰を用いたプログラムを作りなさい。
という問題が出たのですが・・・再帰プラグラムじたいが理解不能で・・・
どういうプログラムがありますか?C#です。
ご迷惑をおかけしますがよろしくお願いします
再帰プログラム
Re:再帰プログラム
再帰で有名なのはハノイの塔ですよね。
円盤と、棒で2つはクラスが作れるかな。3つとなるとね。何を作ろう。
他には順列・組み合わせ、最大公約数、マージソート、クイックソートなど。
迷路の探索に使ったこともあります。最近使ったのは、マインスイーパーを作った
ときに、クリックしたときに周辺部の所がいっぺんに開く部分です。
バグさんの隣接している色を調べるのと同じ方法ですね。たぶん。
円盤と、棒で2つはクラスが作れるかな。3つとなるとね。何を作ろう。
他には順列・組み合わせ、最大公約数、マージソート、クイックソートなど。
迷路の探索に使ったこともあります。最近使ったのは、マインスイーパーを作った
ときに、クリックしたときに周辺部の所がいっぺんに開く部分です。
バグさんの隣接している色を調べるのと同じ方法ですね。たぶん。
Re:再帰プログラム
2つ以上のクラスを使った再帰は、ファイルとディレクトリの構造を辿る際によく使用されますね。
Visitor パターンで検索すると、それなりに情報が出てくると思います。
ダブルディスパッチなんかも、2つ以上のクラスを使った再帰になるのかな?ちょっと自信ないです。
Visitor パターンで検索すると、それなりに情報が出てくると思います。
ダブルディスパッチなんかも、2つ以上のクラスを使った再帰になるのかな?ちょっと自信ないです。
Re:再帰プログラム
冗長かもしれませんが。至極簡単に言えば
階乗の計算のとき使うとは
n>1のとき
F(n)=n*F(n-1) ----(ⅰ)
n=1のとき
F(1)=1
(i)の式で引数nで渡されたものを引数(n-1)にしてもう一回同じ処理をするために自分を呼びます
F(n)=n*{F(n-1)=(n-1)*F(n-2)}
ってな感じで自分を何回も呼んだあとに、nが1になったらnの階乗の出来上がりです。
値が収束するまで同じ関数を繰り返すときに使うかな?
クイックソートぐらいでしか使ったことないからなぁ・・・
考え方はこんな感じですればいいかと思うんですが
2つを使った・・・・再帰って無理に作るものじゃない気もしますけど、こういうのを考えるのも楽しいでしょうからがんばってください^^
階乗の計算のとき使うとは
n>1のとき
F(n)=n*F(n-1) ----(ⅰ)
n=1のとき
F(1)=1
(i)の式で引数nで渡されたものを引数(n-1)にしてもう一回同じ処理をするために自分を呼びます
F(n)=n*{F(n-1)=(n-1)*F(n-2)}
ってな感じで自分を何回も呼んだあとに、nが1になったらnの階乗の出来上がりです。
値が収束するまで同じ関数を繰り返すときに使うかな?
クイックソートぐらいでしか使ったことないからなぁ・・・
考え方はこんな感じですればいいかと思うんですが
2つを使った・・・・再帰って無理に作るものじゃない気もしますけど、こういうのを考えるのも楽しいでしょうからがんばってください^^
Re:再帰プログラム
C#で、再帰プログラムを使用して、クラスを3つ使用して8クイーンプログラムを作りたいのですが、プログラムガ全然わからないので(構文)教えてもらえますでしょうか?
Re:再帰プログラム
クラスを3つ指定されていますが、どのような振り分けになりますか?
なんでもいいので、クラスを3つ使用すればいいのでしょうか?
もっと仕様を明確にしてください。
なんでもいいので、クラスを3つ使用すればいいのでしょうか?
もっと仕様を明確にしてください。
Re:再帰プログラム
ご返事ありがとうございます。
何でもいいので クラスを3つ使用しているプログラムで大丈夫です。
・再帰を使用していること。
・なんでもいいので、クラスを3つしようしていること。
・C#で開発されていること。
くらいです。初心者で大変わかりにくい内容かとはございますが、よろしくお願いします。
何でもいいので クラスを3つ使用しているプログラムで大丈夫です。
・再帰を使用していること。
・なんでもいいので、クラスを3つしようしていること。
・C#で開発されていること。
くらいです。初心者で大変わかりにくい内容かとはございますが、よろしくお願いします。
Re:再帰プログラム
再帰呼び出しの方法は簡単です。しかし、これでは問題があります。この関数を呼び出すと、プログラムはそのうち停止してしまいます。なぜなら、関数呼び出しが永遠に続いてしまうからです。つまり、最初のfunc関数の中で、次のfunc関数を呼び出し、さらに次のfunc関数を・・・のようになってしまうのです。
Re:再帰プログラム
8クイーンについては、C言語ですが再帰の解説があります。
本来「再帰関数」というのは手段であって目的ではありません。
しかし学習者にとっては「再帰関数の学習」が目的であることが多く、
そのような例題ばかり見かけます。
その点、このページは手段としての「再帰関数」を扱っているといえるでしょう。
(8クイーンについては再帰関数を使う必然は無いと思いますが)
Cパズルプログラミング-再帰編
http://karetta.jp/book-cover/cpuzzle-recursion
同様に「クラス」というのも手段です。
オブジェクト指向の恩恵を受けられない規模のプログラムで
オブジェクト指向の学習をするというのは困難だと思います。
(教わる人も教える人も)
まず、クラスを意識しないでプログラムを完成させてから、
プログラムをここに載せれば、どの部分をクラス化すると良いか、
アドバイスが得られるのではないでしょうか。
本来「再帰関数」というのは手段であって目的ではありません。
しかし学習者にとっては「再帰関数の学習」が目的であることが多く、
そのような例題ばかり見かけます。
その点、このページは手段としての「再帰関数」を扱っているといえるでしょう。
(8クイーンについては再帰関数を使う必然は無いと思いますが)
Cパズルプログラミング-再帰編
http://karetta.jp/book-cover/cpuzzle-recursion
同様に「クラス」というのも手段です。
オブジェクト指向の恩恵を受けられない規模のプログラムで
オブジェクト指向の学習をするというのは困難だと思います。
(教わる人も教える人も)
まず、クラスを意識しないでプログラムを完成させてから、
プログラムをここに載せれば、どの部分をクラス化すると良いか、
アドバイスが得られるのではないでしょうか。