C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: 再帰とループについて


(過去ログ 50 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■27501 / inTopicNo.1)  再帰とループについて
  
□投稿者/ C学習中 (1回)-(2008/11/08(Sat) 11:36:29)

分類:[C/C++] 

C、C#、C++言語を学習中です。

「再帰プログラムはループプログラムに書き換えることができる」と書かれていますが
皆様はどんな基準で再帰またはループを選ばれているのでしょうか?

再帰は直観的で分かりやすいとの理由で再帰を選ぶと
再帰はスタックが消費され、動作エラーを引き起こす場合もあるとのこと。

再帰のプログラムで有名な「ハノイの塔」、「クイックソート」は
スタックエラーを起こさないですか。
力不足でループプログラムの場合のイメージが湧きません。

宜しくお願いします。


引用返信 編集キー/
■27502 / inTopicNo.2)  Re[1]: 再帰とループについて
□投稿者/ .SHO (6回)-(2008/11/08(Sat) 12:11:59)
自分の場合…

ループで処理できるなら再帰は使いません。
再帰を使うことは滅多にないです。
引用返信 編集キー/
■27503 / inTopicNo.3)  Re[2]: 再帰とループについて
□投稿者/ Gab_km (1回)-(2008/11/08(Sat) 12:25:47)
ご覧になったこともあるかも知れませんが、ご参考までに。

http://www2.cc.niigata-u.ac.jp/~takeuchi/tbasic/BackGround/Recursive.html


私の場合、あるフォームに対し要素間の親子関係を維持しながら処理を行うプログラムで、
子要素を引数に再帰を用いているを見たことがあります。
引用返信 編集キー/
■27504 / inTopicNo.4)  Re[1]: 再帰とループについて
□投稿者/ アキラ (119回)-(2008/11/08(Sat) 13:15:05)
アキラ さんの Web サイト
No27501 (C学習中 さん) に返信

> 再帰は直観的で分かりやすいとの理由で再帰を選ぶと
> 再帰はスタックが消費され、動作エラーを引き起こす場合もあるとのこと。

末尾再帰はたいていコンパイラの最適化でループに展開されるんじゃないかと。
それ以外の再帰についてはわからないです。
引用返信 編集キー/
■27507 / inTopicNo.5)  Re[1]: 再帰とループについて
□投稿者/ 倉田 有大 (329回)-(2008/11/08(Sat) 15:01:05)
私はそんなに深く潜らない限り再起つかっちゃいますね。
ケースバイケースかな。
引用返信 編集キー/
■27510 / inTopicNo.6)  Re[2]: 再帰とループについて
□投稿者/ なちゃ (200回)-(2008/11/08(Sat) 15:41:49)
再起の深さが明確に制限されている場合は、再起を使うことにそれほど問題はありません。
再起の深さが予測出来ない場合は危険があります。

ハノイの塔は、枚数以上の深さにはなりませんから深さに関する危険はありません。
というか深さの前に終わらない危険の方が先に来ます。

クイックソートは最悪要素数分の深さになる可能性がありますから、対象データによっては危険です。
コントロールのトラバーサルは、コントロールの親子の深さが最大ですから普通は問題ありません。

というように状況によります。

※って書きましたけどどっか間違ってるかも知れませんのであしからず

引用返信 編集キー/
■27511 / inTopicNo.7)  Re[3]: 再帰とループについて
□投稿者/ なちゃ (201回)-(2008/11/08(Sat) 16:20:06)
No27510 (なちゃ さん) に返信
> 再起の深さが明確に制限されている場合は、再起を使うことにそれほど問題はありません。
> 再起の深さが予測出来ない場合は危険があります。
>
> ハノイの塔は、枚数以上の深さにはなりませんから深さに関する危険はありません。
> というか深さの前に終わらない危険の方が先に来ます。
>
> クイックソートは最悪要素数分の深さになる可能性がありますから、対象データによっては危険です。
> コントロールのトラバーサルは、コントロールの親子の深さが最大ですから普通は問題ありません。
>
> というように状況によります。
>
> ※って書きましたけどどっか間違ってるかも知れませんのであしからず
>
引用返信 編集キー/
■27512 / inTopicNo.8)  Re[4]: 再帰とループについて
□投稿者/ なちゃ (202回)-(2008/11/08(Sat) 16:23:16)
すみません、上のは書き込みミスりました…

No27510 (なちゃ さん) に返信
>ハノイの塔は、枚数以上の深さにはなりませんから深さに関する危険はありません。
>というか深さの前に終わらない危険の方が先に来ます。

おっと、大きい枚数で実行したらいきなりエラーになる可能性はありますが、
エラーが起こらない程度に小さくしたところで、今度は終わらないということになるので、
深さの問題の方がずっと後にあるって意味です。

引用返信 編集キー/
■27531 / inTopicNo.9)  Re[5]: 再帰とループについて
□投稿者/ C学習中 (2回)-(2008/11/09(Sun) 09:20:55)
No27512 (なちゃ さん) に返信
> すみません、上のは書き込みミスりました…
>
> ■No27510 (なちゃ さん) に返信
> >ハノイの塔は、枚数以上の深さにはなりませんから深さに関する危険はありません。
> >というか深さの前に終わらない危険の方が先に来ます。
>
> おっと、大きい枚数で実行したらいきなりエラーになる可能性はありますが、
> エラーが起こらない程度に小さくしたところで、今度は終わらないということになるので、
> 深さの問題の方がずっと後にあるって意味です。
>

多くの回答有難うございました。


使用できるメモリが多い場合は
再帰、ループどちらでも良いような気がしています。
(あえてループにする必要はない。)

再帰、ループの両方があれば
実装しやすい方を選ぶ。
処理の速い方を選ぶ。
という事だと思います。
倉田さん .SHOさん と同意見かな?

実際にはGab_kmさんのような使い方になると思います。

アキラさんの末尾再帰は参考になりました。
コンパイラが信用できない場合はこの部分に
手を入れてループに変換できるということですね。

なちゃさんの回答も大変参考になりました。
実はクイックソートのコードを再帰で書いてありまして
疑問がおこり、このスレを立ち上げました。
「ハノイの塔」でエラーになる前に、終わらない可能性が
高いことも意外でした。
コントロール 〜。  も参考にさせて頂きます。


大変貴重な意見有難うございました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -