再帰関数を理解する方法を教えてください
何故か再帰というアルゴリズムを知ったときこれは絶対に使いこなさなければならない。という謎の使命感におそわれてもう4ヶ月くらいサイトを漁って勉強して、ここでも何回質問して回答してくださる方にも迷惑をかけたのに、未だに簡単なものしか書けません。そして読めません
読む順序がどうしてもわからないのです。
こんなに勉強しているのに理解できないのはどう考えても僕の頭のスペックの問題だとしか考えられません。どうしても理解したいんです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
再帰処理の基本は、
- 問題を、少し解きやすい問題の組み合わせで表現する。
- 一番解きやすい問題を実際に解く。
です。
階乗計算、フィボナッチ数、 ハノイの塔, フラクタル図形、 クイックソート、フォルダーの階層表示
といった問題を再帰でプログラミングするときに、このことを念頭においてみてください。
フォルダーの階層表示をプログラムできますか?
(windows のコマンドの tree, linux の tree コマンドのことです)
以下では フォルダーの階層表示について この観点ですこし考えてみます。
問題の分解:
- フォルダー名を表示する。
- フォルダーにあるファイル名を表示する。
- サブフォルダがあれば、 (そのフォルダー名、そのフォルダーにあるファイル名を表示する) を行う。
3 番の処理が、再帰になります。
(いま 解こうとしている問題と同様の処理になります。
でも階層が1つ 少なくなっているので すこし解きやすくなっているはず。)
解きやすい問題:
サブフォルダがなければ、
フォルダー名を表示する。
フォルダーにあるファイル名を表示する。
だけです。これは簡単にかけるはず。
参考:
- ディレクトリの階層構造をツリー表示したい http://oshiete.goo.ne.jp/qa/1381950.html
- 帰呼び出しを使うアルゴリズムとして超有名な「ハノイの塔」を詳細に解説します。 http://www13.plala.or.jp/kymats/study/C++/Hanoi/Hanoi.html
- gnuplotでフラクタル図形を描こう(再帰呼び出しと言えば, フラクタル図形) http://itchyny.hatenablog.com/entry/20130211/1360555378
さらに追加; (2015-07-05)
再帰に限定されているわけではありませんが、次の本は参考になるとおもいます。
書籍中に出てくるプログラムコードには 再帰をつかっているものが数多くあります。
- その数式、プログラムできますか? http://www.amazon.co.jp/gp/product/B00XX9K62W
投稿2015/07/03 22:26
編集2015/07/05 08:57総合スコア22324
0
高校数学で習う「数学的帰納法」は理解していますか?
理解していなかったら、まずそこからですかね。
投稿2015/07/03 15:42
総合スコア84423
0
再帰関数、再帰手順は、
1.コンピュータ資源の全てが貧しかった時代に、解決手段の一つとして、使われた手法です。
現在では、再帰で解決した方が良い場合のみ、適用します。
2.スタックをプログラム側から、意識して使用しない、
または、プログラム側から、制御するすべすらない、
現在の、コンパイラ環境等では、
スタックオーバーフローを起こしかねない手法です。
3.マルチコアなCPUが当たり前で、GPU演算が可能な現在では、
再帰よりは、並列化を可能とする手法を、学習した方が、良いかもしれません。
’
だからといって、再帰を否定するわけではありません。
再帰を使用することによって、効率があがり、安全で、美しいプログラムがかけるのであれば、
採用すればよいだけです。
’
検索ワード:再帰関数とは
など、「とは」検索は、手掛かりが無い場合、概念を掴みたい場合に、
役に立つこともあります。
投稿2015/07/03 15:52
総合スコア2028
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/03 16:12
2015/07/03 17:21
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。