- なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
41 :デフォルトの名無しさん[sage]:2015/08/12(水) 12:17:54.41 ID:KQiec6kq - >>33
> 理解が早いのは完全に地頭がいいだけじゃね? 慣れの問題でしか無い。 プログラミング技術の学習段階はこんな感じ 1. 技術を知らない(再帰を知らない) 2. 技術があることをするが使えない(再帰を知っているが使えない) 3. 技術がわかる。(再帰がわかる) 4. なんでもその技術で解こうとする。(何でも再帰を使おうとする) 5. 技術を使うのに適切な場合とそうでない場合の区別がつく。(適切な場合に再帰を使う) 技術がわかった=技術をマスター ではなくて、必ず4の段階を通る。 で4の段階で止まってしまうと、技術使える俺は頭いいとか言い出すw
|
- なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
53 :デフォルトの名無しさん[sage]:2015/08/12(水) 19:43:06.19 ID:KQiec6kq - >>52
俺は>>41でいう5の段階だから、当然知ってるよ。 再帰を知ったのは高校の時ぐらいかな? 指定ディレクトリ以下のすべてのファイルを処理する必要があって 必然的に知る必要があった。そこからもう10年以上たつし。 最近ではMIMEメールのパースとか、連想配列の 全ての値の処理とかで使ったかな。 再帰を使うことはめったにない。そしてミスをしやすい所でもある。 だから再帰を使うときは、再帰を考慮しなくていい形に置き換えるようにしている。 つまりJavaScriptでいうmapやreduceの形にする。再帰部分と処理部分に分けて再帰部分を隠ぺいする。 通常書くのはコールバックで呼ばれる処理部分のみ。 そうすることで可読性も大きく上昇する。 普段はやはり再帰のコードは書くべきじゃないよ。 可読性悪いからね。
|
- なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
56 :デフォルトの名無しさん[sage]:2015/08/12(水) 20:33:35.39 ID:KQiec6kq - >>53
例えば連想配列の全ての値を×10したいなら、これだけでいい。 ※JavaScript recursive(obj, value => value * 10); これだけで済むように(内部で再帰を使って)recursiveという関数を作る。 作った関数の中身はもう見る必要はないからあとはこれだけのコードで済む。 このコードは、その場で再帰のコードを書くよりも明らかに可読性が高い。 なので可読性が悪い再帰のコードは、さっさと隠蔽化してしまって 普段は再帰を意識しないようにするということ。 で所で話は変わるが、recursiveという名前をつけたが、 このように連想配列の全ての値を処理するという関数、 なにか適切な名前ない? 他の言語だとありそうなものなんだが。
|
- なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
57 :デフォルトの名無しさん[sage]:2015/08/12(水) 20:34:03.13 ID:KQiec6kq - 自己レスしちまった。>>53じゃなくて>>54あて
|
- なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
61 :デフォルトの名無しさん[sage]:2015/08/12(水) 20:47:57.61 ID:KQiec6kq - >>58
mapは一般的には配列から配列の変換でしょ? ツリー上の構造まで対応しているmapとかあるの? 余談けどmapって写像のことだよね。 数学勉強してるとプログラム言語みたいで楽しいよね。 代数学の体とか束とか。 体は演算子オペレータが定義されたクラス 束はComparableインターフェースを持ったクラス とかさ。(↑結構適当にいってるので突っ込まないで) こういう風にプログラム言語と結びつけて 解説している記事ってあまりないよね。 プログラミングなら知識あるんで、こっち方面から 数学を解説してくれるとわかりやすいのにw
|
- なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
63 :デフォルトの名無しさん[sage]:2015/08/12(水) 20:51:09.08 ID:KQiec6kq - >>60
俺はlodashの方が好みなんで(どうせ同じだろうから)こっちで話をすると https://lodash.com/docs#map 確かにlodashのmapはオブジェクトにも対応しているようだ。 これはちょっと見落としていた。だけどこうなるみたいだけど? function timesThree(n) { return n * 3; } _.map({ 'a': 1, 'b': 2 }, timesThree); // → [3, 6] (iteration order is not guaranteed) 俺の希望としては { 'a': 3, 'b': 6 } こうなってほしい。
|
- なあ、再帰関数好きな人いる? [転載禁止]©2ch.net
65 :デフォルトの名無しさん[sage]:2015/08/12(水) 20:53:32.81 ID:KQiec6kq - >>62
それがあったか。 ディレクトリトラバーサルとか普通に言えるのに 思いつかなかった。 その単語が使われてる言語やライブラリってありますか?
|