再帰プログラム

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

再帰プログラム

#1

投稿記事 by そねっと » 16年前

えー聞くところが場違いかも知れませんが 教えてください。

再帰プログラムでメインクラス以外に2つ以上のクラスを再帰を用いたプログラムを作りなさい。

という問題が出たのですが・・・再帰プラグラムじたいが理解不能で・・・

どういうプログラムがありますか?C#です。

ご迷惑をおかけしますがよろしくお願いします

バグ

Re:再帰プログラム

#2

投稿記事 by バグ » 16年前

参考書なんかには、階乗の計算に使われていたりしますね。
私は落ち物パズルの消去判定(同じ色が何個隣接しているか?とか)に使ったりしますけど…

non

Re:再帰プログラム

#3

投稿記事 by non » 16年前

再帰で有名なのはハノイの塔ですよね。
円盤と、棒で2つはクラスが作れるかな。3つとなるとね。何を作ろう。
他には順列・組み合わせ、最大公約数、マージソート、クイックソートなど。

迷路の探索に使ったこともあります。最近使ったのは、マインスイーパーを作った
ときに、クリックしたときに周辺部の所がいっぺんに開く部分です。
バグさんの隣接している色を調べるのと同じ方法ですね。たぶん。

ななし

Re:再帰プログラム

#4

投稿記事 by ななし » 16年前

2つ以上のクラスを使った再帰は、ファイルとディレクトリの構造を辿る際によく使用されますね。

Visitor パターンで検索すると、それなりに情報が出てくると思います。

ダブルディスパッチなんかも、2つ以上のクラスを使った再帰になるのかな?ちょっと自信ないです。

d@初心者

Re:再帰プログラム

#5

投稿記事 by d@初心者 » 16年前

冗長かもしれませんが。至極簡単に言えば
階乗の計算のとき使うとは

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つを使った・・・・再帰って無理に作るものじゃない気もしますけど、こういうのを考えるのも楽しいでしょうからがんばってください^^

lbfuvab

Re:再帰プログラム

#6

投稿記事 by lbfuvab » 16年前

素因数分解にもつかえそうですね。

そねっと

Re:再帰プログラム

#7

投稿記事 by そねっと » 16年前

C#で、再帰プログラムを使用して、クラスを3つ使用して8クイーンプログラムを作りたいのですが、プログラムガ全然わからないので(構文)教えてもらえますでしょうか?

バグ

Re:再帰プログラム

#8

投稿記事 by バグ » 16年前

クラスを3つ指定されていますが、どのような振り分けになりますか?
なんでもいいので、クラスを3つ使用すればいいのでしょうか?
もっと仕様を明確にしてください。

そねっと

Re:再帰プログラム

#9

投稿記事 by そねっと » 16年前

ご返事ありがとうございます。
何でもいいので クラスを3つ使用しているプログラムで大丈夫です。

・再帰を使用していること。
・なんでもいいので、クラスを3つしようしていること。
・C#で開発されていること。

くらいです。初心者で大変わかりにくい内容かとはございますが、よろしくお願いします。

dic

Re:再帰プログラム

#10

投稿記事 by dic » 16年前

再帰呼び出しの方法は簡単です。しかし、これでは問題があります。この関数を呼び出すと、プログラムはそのうち停止してしまいます。なぜなら、関数呼び出しが永遠に続いてしまうからです。つまり、最初のfunc関数の中で、次のfunc関数を呼び出し、さらに次のfunc関数を・・・のようになってしまうのです。

たいちう

Re:再帰プログラム

#11

投稿記事 by たいちう » 16年前

8クイーンについては、C言語ですが再帰の解説があります。
本来「再帰関数」というのは手段であって目的ではありません。
しかし学習者にとっては「再帰関数の学習」が目的であることが多く、
そのような例題ばかり見かけます。
その点、このページは手段としての「再帰関数」を扱っているといえるでしょう。
(8クイーンについては再帰関数を使う必然は無いと思いますが)

Cパズルプログラミング-再帰編
http://karetta.jp/book-cover/cpuzzle-recursion


同様に「クラス」というのも手段です。
オブジェクト指向の恩恵を受けられない規模のプログラムで
オブジェクト指向の学習をするというのは困難だと思います。
(教わる人も教える人も)

まず、クラスを意識しないでプログラムを完成させてから、
プログラムをここに載せれば、どの部分をクラス化すると良いか、
アドバイスが得られるのではないでしょうか。

そねっと

Re:再帰プログラム

#12

投稿記事 by そねっと » 16年前

こんばんは。

皆さん 本当にありがとうございます。

無事 解決できました。

閉鎖

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