1 名前:デフォルトの名無しさん [2015/11/28(土) 18:51:38.86 ID:Rc2MJzM/.net] なあ、再帰関数好きな人いる?
2 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 18:55:04.46 ID:SbMJmhTc.net] わくわく
3 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 19:23:33.42 ID:mf/sQ31/.net] 嫌いな奴なんて見たことない
4 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 19:30:25.39 ID:R0seH/nX.net] ループで書けるものはループで書く。 再帰使うのは仕方ない場合だけ。
5 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 19:53:36.58 ID:R0seH/nX.net] スタック的なメモリ確保が必要かどうかがループと再帰を使い分ける分岐点じゃね。 末尾再帰最適化とかは本末転倒なイメージ。
6 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 20:05:09.47 ID:N2qWmI2+.net] 前スレ なあ、再帰関数好きな人いる? パート2 peace.2ch.net/test/read.cgi/tech/1441528549/
7 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 20:30:33.91 ID:Tq6BVuZs.net] >>5 ループ実装を隠せるのは大きいよ 抽象化はプログラミング言語の進化のベクトルと一致するからね
8 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 20:39:12.74 ID:R0seH/nX.net] ループより再帰のほうが抽象度が高いと言っている? そこは俺にはよくわからん。 俺的にはプログラムには必要最小限の機能を使うべきで、 本質的にループより再帰のほうが強力なのだから 可能な限りループを使うべきと思ってる。 もちろん再帰をループにするためにスタックを自前で用意するといったことでは本末転倒だが。
9 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 20:41:49.23 ID:R0seH/nX.net] ツリーの巡回は再帰を使ったほうがいいだろう。 リストの巡回はループでいいんじゃね?
10 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 20:48:22.48 ID:Tq6BVuZs.net] >>8 > 俺的にはプログラムには必要最小限の機能を使うべき そういうのはコンパイラなりインタプリタなりが頑張るべきところだと思うね 人間はより抽象化された対象を扱うようにするのがモダンなプログラミング言語の方向だし
11 名前:デフォルトの名無しさん [2015/11/28(土) 20:52:46.74 ID:fFSPKhVt.net] 抽象的なスレだな
12 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 20:58:39.47 ID:R0seH/nX.net] うーん。必要な抽象化は歓迎するが無駄な抽象化は歓迎しないというか。 この例は再帰とは関係ないけどJavaのファイル入出力なんかは 結構複雑な作りになってて無駄な抽象化なんじゃねーのとか思ってしまう。 まあ、俺個人の感想だが。
13 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 21:12:02.73 ID:M/Wigktg.net] アルゴリズムが再帰なら普通に再帰で書く スタックサイズ制限とかあるなら別だけど
14 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 21:30:44.25 ID:10sD81C/.net] アルゴリズムが再帰であってもクイックソートなど 再帰のままじゃあ使い物にならんものがいくらでも。
15 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 21:32:52.35 ID:R0seH/nX.net] スマンw クイックソートは再帰で書くわw
16 名前:デフォルトの名無しさん [2015/11/28(土) 21:34:06.03 ID:fFSPKhVt.net] 書いたことないくせにw
17 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 21:52:35.40 ID:R0seH/nX.net] 書いたことはあるけど10年以上昔の話だな。 これは拾い物だけどクイックソートなんてこれだけのことだろ。 qsort [] = [] qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
18 名前:デフォルトの名無しさん [2015/11/28(土) 22:09:37.77 ID:fFSPKhVt.net] リストの巡回はループでいいんじゃないんかw
19 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 22:13:01.33 ID:R0seH/nX.net] クイックソートは単純な巡回とは違うだろ。 だからスタック的なメモリを必要とするかどうかだよ。
20 名前:デフォルトの名無しさん [2015/11/28(土) 22:21:22.26 ID:fFSPKhVt.net] filterはリストの巡回とちゃうんかw
21 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 22:25:38.46 ID:R0seH/nX.net] filterの実装がどうなってるかまでは知らんがな。
22 名前:デフォルトの名無しさん [2015/11/28(土) 22:32:42.45 ID:fFSPKhVt.net] 知らんなら最初からそう言えやw
23 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 22:39:27.55 ID:R0seH/nX.net] なんか変なテンションだなぁ 俺がC++とかでfilter相当の関数書かにゃならんくなったらループで書くよ。
24 名前:デフォルトの名無しさん [2015/11/28(土) 22:44:37.77 ID:fFSPKhVt.net] クイックソートはhaskellでfilterはc++なんか? なんか変な奴だなぁニヤニヤ
25 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 22:49:36.42 ID:R0seH/nX.net] 何が変か、わからん。 まあ関数型言語なんかは再帰推奨らしいがあんまり好きになれん。
26 名前:デフォルトの名無しさん [2015/11/28(土) 22:59:20.81 ID:fFSPKhVt.net] 推奨なんて生易しいもんじゃないで。 理論に囚われすぎて原理主義に陥いった餓鬼共やw
27 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 23:05:01.58 ID:R0seH/nX.net] まあ参照透過性とかは原理主義か?という気はする。
28 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 23:29:11.93 ID:W0C1+0hV.net] やっぱハノイの塔は再帰 有能
29 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 23:38:40.71 ID:SyBhAT0R.net] お遊びに使うためのものだね。 再帰なんて。
30 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 23:40:05.61 ID:1kauGQoG.net] >>8 ループでquicksort書いてみてくれ 上のコードと比較で見るだろ 言語は好きに選んでいい
31 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 23:45:06.21 ID:R0seH/nX.net] ループでクイックソート書こうとするとスタック的なものを自前で用意せにゃならんのじゃないか。 めんどくさすぎ。
32 名前:デフォルトの名無しさん mailto:sage [2015/11/28(土) 23:51:19.94 ID:oWRhnwkW.net] なんかやたらと再帰がお遊びだと連呼する奴がいるが、どういう意図で言っているのか分からん。 お遊び感覚で動くものが作れるのだから、苦労しなくていい分優れているってこと?
33 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 00:02:43.51 ID:aMnBRPWz.net] >>25 関数型言語は変数再代入禁止(のものが多い)から、そもそもループは書けないんだよね
34 名前:デフォルトの名無しさん [2015/11/29(日) 00:04:00.34 ID:BjpFnvXY.net] 再帰がお遊びだ 再帰がお遊びだ 再帰がお遊びだ >>32 が可哀想だから連呼してあげたよ
35 名前:デフォルトの名無しさん [2015/11/29(日) 00:06:31.94 ID:BjpFnvXY.net] あ、意味は「お遊び感覚で動くものを作るな」という事です。
36 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 00:10:17.71 ID:aMnBRPWz.net] 動くんならいいんじゃないの?
37 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 00:20:09.59 ID:iZIE7tB6.net] ま〜た関数型コンプレックスのアホが暴れてるのか
38 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 00:24:10.72 ID:aMnBRPWz.net] 関数型は関数脳にならないと書けないからねー 手続き脳がしみついてると貶す対象にしかならないよね
39 名前:デフォルトの名無しさん [2015/11/29(日) 00:29:56.09 ID:BjpFnvXY.net] お前ら俺を笑い死にさせる気かw
40 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 03:56:07.52 ID:1KywF+Vz.net] 初めて知った時すごいと思いました
41 名前:uy ◆Qawu9.2l1E mailto:sage [2015/11/29(日) 04:26:32.10 ID:RQPUWZLH.net] せっかく埋め立てたのに何またスレ立ててんのゴミクズ
42 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 06:56:51.27 ID:GeZFA4k5.net] ぼくたん初心者なのでわからんけど僕が今作ってる 関数から値を求める計算プログラムで再起型関数が大活躍してるお たぶん今僕がやってる書き方が一番きれいだと思うんだけどなー
43 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 15:21:16.51 ID:+8PPW4GA.net] > たぶん今僕がやってる書き方が一番きれいだと思うんだけどなー いろんな方法で書いてみないと比較できないんじゃね?
44 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 15:49:46.72 ID:BHpn4xqB.net] クイックソートで再帰なんてありえんと さんざん言われ続けているのに、まだバカが湧いとるんだな。 ライブラリのループ版を使えば何の手間もかからず高速処理ができるのに わざわざ問題ありまくりの再帰で書くなんてテロ同然の暴挙。
45 名前:デフォルトの名無しさん [2015/11/29(日) 16:17:12.78 ID:1uX74bCE.net] >>44 それって結局真の再帰を見たことがないからそう思い込んでるだけだよね。 見せてやるよ、真の再帰ってやつをな。 https://ideone.com/EDtRIH
46 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 16:52:01.83 ID:+8PPW4GA.net] もうソーティングの話は良いよ、仕事で使う大抵の言語ではライブラリとして用意されてるんだから。
47 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 17:09:26.93 ID:BHpn4xqB.net] >>45 再帰じゃあ、10件程度のソートに控えるという事なんだよな。
48 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 17:29:39.96 ID:+8PPW4GA.net] 10件程度のソートならソーティングネットワークによるソーティングが一番速いから 十分少ない要素数に対してはそいつを呼び出して終わりだろ。 書いてないだけだろうけど。
49 名前:デフォルトの名無しさん [2015/11/29(日) 20:46:37.54 ID:ILoya83o.net] >>9 俺の見解では、ツリートラバースに再帰を必要とするのはデータ構造に問題があると思うんだよな。 イテレータの実装を考えると再帰はちょっと無理があるんじゃないかと思う。 もちろん出来ないわけではないのだが。 ノードが子ノードを保持するような原始的なデータ構造は良くないのではないか。
50 名前:デフォルトの名無しさん [2015/11/29(日) 20:56:36.78 ID:ILoya83o.net] 代表的なツリーの一つとしてHTMLがある。 HTMLのフラグメントを切り出し、別のノードの子として加えるような操作を考えるとき、 これはやはりループに軍配が上がると思う。 もちろん、ノードに子ノードを保持するような原始的なデータ構造ではかなりメンドクサイ。 というのもHTMLの一部を切り出す時、ノードの種類によって、ノードの分割や併合が起こる。 再帰と原始的なデータ構造では非常にめんどくさい。 私はこの用途のために直列化ツリー構造というデータ構造を考案した。 (おそらくすでに一般的に使われているとは思うのだが。)
51 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 21:13:17.76 ID:TqJ6Jff5.net] ループは再帰の特別なケースに過ぎない ループの方が無駄がなく見える事もあるだろう だが結局はその程度の話だ
52 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 21:25:34.60 ID:+8PPW4GA.net] >>49 > イテレータの実装を考えると再帰はちょっと無理があるんじゃないかと思う。 問題はデータ構造の方じゃなくて言語の方だと思う。 というのも、yieldを持つ言語なら再帰を使ったやり方が最も簡潔に書けるから。 -- language:lua function traverse(node) if node then traverse(node.left) coroutine.yield(node.value) traverse(node.right) end end co = coroutine.create(traverse) not_end, value = coroutine.resume(co, node)
53 名前:デフォルトの名無しさん [2015/11/29(日) 21:52:31.69 ID:ILoya83o.net] >>52 ちょっとそのやり方で、HTMLの一部をコピペするコード書いてみて。
54 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 22:12:36.39 ID:+8PPW4GA.net] >>53 一部ってのはどういう風に探すのん? 特定の属性を持ってるタグを探す感じ?
55 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 22:23:46.56 ID:euqwPPlR.net] どういう風に探すか後から指定できる感じで。
56 名前:デフォルトの名無しさん [2015/11/29(日) 23:04:51.51 ID:ILoya83o.net] >>54 HTMLのコピペがいつ起こるかというと、ユーザーがその操作をした時なので、 そういう前提で設計してはどうでしょうか。
57 名前:デフォルトの名無しさん [2015/11/29(日) 23:13:29.23 ID:ILoya83o.net] HTMLをユーザーの直観に適合する形で操作するのは意外と難しいですよ。 HTMLフラグメントの移動なんてどうですかね。 面白い題材だと思うのですが。
58 名前:デフォルトの名無しさん mailto:sage [2015/11/29(日) 23:27:31.14 ID:euqwPPlR.net] 直列化ツリー構造kwsk
59 名前:デフォルトの名無しさん mailto:sage [2015/11/30(月) 00:13:02.74 ID:vNB8BIt6.net] >>53 書いてはみたけどウェブプログラミング初心者でごめんよ https://ideone.com/KO4rFy
60 名前:デフォルトの名無しさん mailto:sage [2015/11/30(月) 11:10:04.73 ID:lmaKmArc.net] >>59 乙
61 名前:デフォルトの名無しさん mailto:sage [2015/11/30(月) 14:51:10.36 ID:+Ls/PK0X.net] >>52 >>53 を繰り返しで書ける人はいないみたいだね。
62 名前:デフォルトの名無しさん mailto:sage [2015/11/30(月) 20:27:21.92 ID:lmaKmArc.net] そういやC++のstd::mapのイテレータとかってどうなってんるのん?
63 名前:デフォルトの名無しさん mailto:sage [2015/11/30(月) 21:11:57.14 ID:9VRs5I4S.net] >>62 ノードオブジェクトに親を指すポインターもあって愚直に辿ってる。 赤黒木使ってるのが殆どだから、 レスしてる奴もコード読めない奴の方が多いんじゃないかw
64 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 00:02:40.17 ID:M545w8lo.net] 赤黒木って難しいよね、結構。
65 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 13:24:08.38 ID:wfTLHpyu.net] データを吐き出す方法として前方イテレートしかしないの前提ならB+木がループでトラバース出来る上に高速なんだけど 挿入と削除を頻繁にするなら、そしてデータがキャッシュに乗り切らない程度に沢山あるなら赤黒木が高速になる 全部キャッシュに乗る程度の小さなデータ数ならAVL木が高速で 更に小さいならベクタ上にヒープ木でも作ればって話になる。 どの構造でも再帰で列挙出来るけど、ループでAVL木や赤黒木のデータを列挙するのは骨だな
66 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/01(火) 15:00:00.16 ID:p3g6QuXB.net] 再帰・ループの相互変換が難しいとかさあ アルゴリズムの根本的なところ理解してないだけ 恥ずかしすぎるこのスレ
67 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 16:04:55.52 ID:M545w8lo.net] f(0,b)=b+1 f(a,0)=f(a-1,1) f(a,b)=f(a-1,f(a,b-1))
68 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 16:39:12.55 ID:wfTLHpyu.net] >>66 >>67 をループに変換するのは難しくないんだね? ちょっとやってみせてよ。
69 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/01(火) 17:10:17.46 ID:p3g6QuXB.net] rubyで書いてくれないとちょっと。
70 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 17:22:48.32 ID:wfTLHpyu.net] >>69 rubyで書いたぞ ideone.com/B1bDnp
71 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 17:26:42.78 ID:alJpKlDN.net] 再帰・ループの相互変換が難しいとかさあ アルゴリズムの根本的なところ理解してないだけ 無能の>>68 は、勉強しろ。
72 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 17:26:51.00 ID:UT6gApH3.net] uyって式も読めないのかな
73 名前: ◆tAo.kQ2STk mailto:sage [2015/12/01(火) 17:33:25.45 ID:wfTLHpyu.net] >>71 無能でーすチッスチッス インターン先はGoogle(技術職8週間、コンパイラを改良するお仕事)でしたが何か? 今The Art of Computer Programmingの英語版の2巻読んでるんだけど 次に読むべき本は何? >>72 数式から雰囲気掴むことも出来ない重度のアスペだから仕方ない。
74 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 17:39:29.54 ID:UT6gApH3.net] >>73 uyの残した名言 何で出来ているか?というのは愚問過ぎる 例えばそれを「uy」としましょう 「uy」から派性したAやBといった概念から「uy」を辿る事は出来る 例えばこの世界にある「オブジェクト指向」という概念や「量子ビット」といった概念から 「uy」を辿る事が可能なので、 それらで世界が出来ているといった勘違いが可能なのです でもそれは、一体いくつ「uy」から継承がネストしていて、プログラム等でいえばメソッドが追加されてしまった純粋性のない概念なのでしょうか? それを知っているのは「uy」だけです この世界にあるすべての概念は「uy」へと通じているので、 料理人は料理を通じて世界を知り、スポーツ選手はスポーツを通じて世界を知ります 誰も「uy」からは逃げられないんだよ
75 名前:konisi ◆tAo.kQ2STk mailto:sage [2015/12/01(火) 17:44:25.62 ID:wfTLHpyu.net] >>74 酉とIDくらい見なさいな # どうでもいいけど最近障害者3級取ったわ
76 名前: ◆tAo.kQ2STk mailto:sage [2015/12/01(火) 17:49:32.14 ID:wfTLHpyu.net] あぁ、俺がuyと同一人物だと勘違いされたのではなく、 uyって人がそういう名言を残したって話か ごめんごめん
77 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 18:38:14.45 ID:UT6gApH3.net] 誰も uy なんかに価値を求めてないのにね
78 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 18:56:25.56 ID:wfTLHpyu.net] でかでかと引用した奴が言うと説得力があるね。
79 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 19:16:25.46 ID:UT6gApH3.net] んでuyちゃんのループ問題はまだ解決しないのかしら
80 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 19:43:22.28 ID:M545w8lo.net] まさにuyがアルゴリズムの根本的なところを理解しているかどうか問われているなw
81 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 19:54:09.54 ID:UT6gApH3.net] それな、今までC++スレ読んでてこいつ頭おかしいなとは思ってたけど実力が問われるよな
82 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 19:58:37.14 ID:wfTLHpyu.net] はてさてuyの実力は如何。 # 俺自身の実力はさておき。
83 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 20:19:08.98 ID:UT6gApH3.net] おせぇな uy
84 名前:デフォルトの名無しさん mailto:sage [2015/12/01(火) 20:49:22.02 ID:M545w8lo.net] uy自力で頑張ってんのか? なかなか根性あるじゃないか。 俺ならググって解答見てしまうがw
85 名前: ◆tAo.kQ2STk mailto:sage [2015/12/02(水) 00:55:46.45 ID:SG5bn8pD.net] 再帰で書かれた超有名な関数をループにするだけの簡単なお仕事なのに 何ですぐに出来ないんだろうね? # 全然簡単じゃないからです
86 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 02:08:55.48 ID:sE+ivAhG.net] 末尾再帰に書き換えてから蓄積引数を中に押し込んでループにするんだよ。 やり方を書いたのだからきっとuyにもできるはず!
87 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 06:47:05.05 ID:UkYZlpUx.net] >>85 普通に悩んだけど再帰なら一瞬でとけんのに ループじゃまず何のデータ構造を使っていいかわからん。
88 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 08:22:03.59 ID:73uUfhWJ.net] スタックだろ。 再帰とループ+スタックは等価。 理屈ではそうだが実際やるのは結構難しいんじゃね。
89 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/02(水) 08:50:25.92 ID:znqtbEKc.net] >>70 ideone.com/KDSDTc 「この程度」が難しいとか言われても は? としか思えない 再帰というのは単なるスタック付きのループであって 君たちがどこら辺で躓いているのか理解できないんです やっぱわからない所がわからない状態なんだろうけど、 つうかSTACKUって知っていますか?
90 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/02(水) 09:14:47.18 ID:znqtbEKc.net] ちなみにここ一週間のuyの生活は、朝起きて、ネトゲして朝寝る です。 ちょうどいま、起きたところではなく24時間起き続けていたので今から寝る前でした とあるゲームであと100戦程の対戦をこなし、誰よりも速く称号を獲得しようとしてる最中です 2chのム板なんて頻繁に開いてる暇とかないし結構忙しいんですわ
91 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 09:18:01.80 ID:UkYZlpUx.net] >>89 お見事です。申し訳ありませんでした。
92 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 09:19:02.13 ID:UkYZlpUx.net] 自分には分からなかったわ じゃあ質問なんだけど、再帰は全てスタック+ループで書き換えられるの?
93 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 09:34:55.30 ID:UkYZlpUx.net] 連投だけど分かったかも、 再帰で帰ってくるべき値をスタックしておくってことでループ+スタック=再帰なのね
94 名前: ◆tAo.kQ2STk mailto:sage [2015/12/02(水) 09:39:29.64 ID:SG5bn8pD.net] >>89 問題のすり替えはいけないな。 俺は「難しくないならやってみて?」って言っただけで そもそも「再帰のほうがループより圧倒的に簡潔に書けるよね?」って文脈だろ。 君が「難しいから出来るもんならやってみろ」って捉えたかどうかなんざ知らんがおつかれさん うんうん、言いたいことは分かった。 それで、そのコードのどこら辺が綺麗なの? ちなみに機械的に変換したのがこちら(rubyじゃなくてごめんよ) https://ideone.com/XsZh4c fとhは機械的に変換したという意味では等価だし君のコードとほぼ同じ事をしてるのだけど、 h関数をパッと見て>>69 式と等しいって言うのは凄く度胸が居るよね? >>92 そもそも再帰をどうやってソフトウェア実装してるかというとコールスタック+ジャンプ≒スタック+ループな訳で # ちなみにスタックの正しいスペルはstack。stackuなんて子は知りませんね。
95 名前: ◆tAo.kQ2STk mailto:sage [2015/12/02(水) 09:48:27.56 ID:SG5bn8pD.net] s/69/67/
96 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 10:13:14.24 ID:amR8vvu9.net] >>92 数学的に証明されてる。
97 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 10:15:05.34 ID:UkYZlpUx.net] >>96 そうなのか、、、 ならできるようにならなきゃだな
98 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 11:13:43.91 ID:sE+ivAhG.net] >>92 再帰は機械的にCPSに書き換えることで末尾再帰にできて そうしたらそれをループに書き換えられる 両方証明されてる
99 名前: ◆tAo.kQ2STk mailto:sage [2015/12/02(水) 11:28:01.97 ID:SG5bn8pD.net] >>97 アセンブリ言語によくあるcall系命令の挙動を正確に言えるようになれば どんな再帰もスタックとループで書けるようになるよ 何しろスタックとループで再帰を表現してるのがcall系命令だからね。 それをそのまま書くとこんな具合に超汚くなるけど。 https://ideone.com/0QXd8O
100 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 12:52:27.49 ID:UkYZlpUx.net] ありがとうございます
101 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 18:34:40.93 ID:73uUfhWJ.net] uyなかなかやるな。 ググって解答見た可能性もあるが、ググれるのも実力のうちだからな。
102 名前:.パンティーガァル mailto:sage [2015/12/02(水) 20:57:19.51 ID:V8iEgN6C.net] >>90 > ちなみにここ一週間のuyの生活は、朝起きて、ネトゲして朝寝る です。 悲観することはない(してないかもしれないがw) それも一つの生き方だ 人間の人生などそんなものだ
103 名前:デフォルトの名無しさん mailto:sage [2015/12/02(水) 22:54:08.11 ID:73uUfhWJ.net] https://ideone.com/upRuBk アッカーマン関数の展開の様子を書いてみた。 メモリリークあるけど気にしない。 もっとスマートにかけそうな気もするが言語が悪いのかな?
104 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 13:20:12.94 ID:lU1L6vf0.net] 誰かループ版と再帰版でベンチマークしてみなよ
105 名前: ◆tAo.kQ2STk mailto:sage [2015/12/03(木) 13:56:10.07 ID:cYXsvyZR.net] >>103 俺も書いてみたけど 確かにどう書いてももうちょっとスマートに書ける気がする。 https://ideone.com/BFP2wh
106 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 17:06:18.36 ID:Sp77D/ez.net] >>105 メンドクサイやつだなお前w
107 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 17:30:30.61 ID:Sp77D/ez.net] >>104 ack(3,10)を100回計算させたところ ループ 3.99秒 再帰 4.50秒 だった。微妙にループが速い。 言語はg++ 最適化あり
108 名前: ◆tAo.kQ2STk mailto:sage [2015/12/03(木) 17:54:16.46 ID:cYXsvyZR.net] >>106 でも115行目以降は>>103 に比べてスマートじゃない? アッカーマン関数をより素直に表現している(ように見える)というか。 テンプレートその他がひじょーに面倒臭い事になってるのは認めるよww
109 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 18:28:15.45 ID:Sp77D/ez.net] >>108 まあそうかも。 言語によってはめちゃくちゃ簡潔に書けたりするのかな、気になる。
110 名前: ◆tAo.kQ2STk mailto:sage [2015/12/03(木) 19:58:47.04 ID:cYXsvyZR.net] >>109 ちなみに扱ってるのがアッカーマン関数だけだということとか考慮しつつ短く書くとこうなる。 https://ideone.com/ILFKf2
111 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 20:19:17.43 ID:Sp77D/ez.net] >>110 だいぶスッキリした。 でも入れ子構造がなくなっちゃってるのはちょっと寂しいかな。
112 名前:デフォルトの名無しさん mailto:sage [2015/12/03(木) 22:49:14.77 ID:Sp77D/ez.net] https://ideone.com/hlWWly んんん、haskell 気持ちいい!
113 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 18:59:19.58 ID:abMxFNxB.net] きっしょ
114 名前:デフォルトの名無しさん mailto:sage [2015/12/04(金) 20:33:45.20 ID:tAWNVevx.net] んぎもちいいいいいいいいいい
115 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 12:06:08.66 ID:kPO9yvRD.net] 気持ち悪い生き物だなこいつは
116 名前:デフォルトの名無しさん [2015/12/05(土) 12:08:54.94 ID:75VGJDuj.net] 再起関数難しくて苦手だわ
117 名前:デフォルトの名無しさん [2015/12/05(土) 12:38:44.60 ID:vOhmiziG.net] おいらも苦手だわ
118 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 12:50:09.98 ID:fWHJ2v3J.net] アッカーマンを知ったばかりで嬉しくてしょうがないんだろうな 俺くらいになるとどうでもよくなるけど
119 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 14:22:16.61 ID:3X0n/q/1.net] さぁ次は竹内関数(たらい回し関数)だ!
120 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 14:24:24.30 ID:FIUesRuL.net] >>118 アッカーマン関数が原始帰納関数でない証明を頼む。 定義がシンプルかつ一般帰納関数になるように アッカーマンさんが構成したらしいが。
121 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 16:27:08.57 ID:fWHJ2v3J.net] その問題が解けて嬉しかったんだろうな
122 名前:デフォルトの名無しさん mailto:sage [2015/12/05(土) 22:53:23.45 ID:Ij5oOkBB.net] たらいのループ化と展開の様子誰か頼む
123 名前:デフォルトの名無しさん mailto:sage [2015/12/07(月) 01:05:16.16 ID:OW/BWl2V.net] なんで自分でやらない? 再帰関数が好きなんだろ?
124 名前:ネトuy ◆Qawu9.2l1E mailto:sage [2015/12/07(月) 02:12:06.27 ID:IGEuV37f.net] w
125 名前:デフォルトの名無しさん mailto:sage [2015/12/07(月) 19:27:26.73 ID:NCOmGjcr.net] https://ideone.com/63bZSE たらいの展開の様子 haskell気持ちEー! ループ化は誰か頼むわ
126 名前:デフォルトの名無しさん mailto:sage [2015/12/08(火) 10:04:03.24 ID:HiEYAt85.net] きも
127 名前:デフォルトの名無しさん mailto:sage [2015/12/10(木) 22:01:50.93 ID:ZuWvmJPo.net] たらいのループ化どうやるかわからん。
128 名前:デフォルトの名無しさん mailto:sage [2015/12/10(木) 23:27:19.50 ID:ZuWvmJPo.net] んーなんかプログラムカウンタに相当するものをスタックに積まなきゃいけない感じ?
129 名前:デフォルトの名無しさん mailto:sage [2015/12/11(金) 02:06:03.72 ID:6gh0GR4/.net] https://ideone.com/rO18tw んーできたっぽい? コンパイラの吐いたアセンブラとか見ながら書いたからチートしてるけど。
130 名前:デフォルトの名無しさん mailto:sage [2015/12/11(金) 13:42:03.51 ID:Z+QL5bbx.net] 再帰厨はcall命令とjmp命令の違いが分かってから布教してほしい
131 名前:デフォルトの名無しさん mailto:sage [2015/12/11(金) 18:14:40.60 ID:H0NYZxX+.net] >>130 何言ってるんだ。。 ループで書けば早い、自分でスタック作れば、って言ってるループキチガイに、 命令にもこういうのがあるよ、必要だからあるんだよ。 と教えてあげてはどうだ?
132 名前:デフォルトの名無しさん mailto:sage [2015/12/11(金) 18:27:07.72 ID:FXKTAEC3.net] >命令にもこういうのがあるよ、必要だからあるんだよ。 だからどうしたとしか。 基地外宗教を布教するなら、自分でするんだね。
133 名前:デフォルトの名無しさん mailto:sage [2015/12/11(金) 19:01:03.96 ID:DIOiIqvd.net] callとjumpの中間の命令もあるよな。 call使わない奴はいないのか?
134 名前:デフォルトの名無しさん mailto:sage [2015/12/11(金) 19:02:56.29 ID:6gh0GR4/.net] 中間の命令ってなんだよ?
135 名前:デフォルトの名無しさん mailto:sage [2015/12/11(金) 19:40:32.13 ID:DIOiIqvd.net] >>134 MIPSのjalとjrとか。 callとretに相当。 jal相当すらなくてpcのレジスタ保存命令しかないのもあった。
136 名前:デフォルトの名無しさん mailto:sage [2015/12/13(日) 22:44:03.31 ID:1ET048aA.net] ツリーのイテレータってどう書くの 誰か頼む
137 名前:uy ◆Qawu9.2l1E [2015/12/14(月) 05:58:59.61 ID:0uboKikK.net] まずはこの手のアルゴリズム抽象化でC++使うのをやめろ 効率悪すぎ
138 名前:uy ◆Qawu9.2l1E [2015/12/14(月) 06:02:04.72 ID:WJU5GahL.net] ツリーのイテレータっつうか ゲームプログラミング的にいえばツリー構造のタスクシステム ゲームプログラミングしてれば普通に書いてるような低レベルの話
139 名前: ◆tAo.kQ2STk mailto:sage [2015/12/14(月) 11:28:00.80 ID:v4oN6dOD.net] >>136 ツリーのイテレータの書き方は大きく分けて3種類ある。 一つ目はイテレータ自身に「どのノードを辿ってきたか」って情報を覚えさせておいてそれを用いる方法 イテレータの空間効率がO(log n)になる代わりにサクセッサの時間効率が平均でO(1)になる。 二つ目はイテレータ自身にキーを覚えさせておいて、一旦そのキーを手繰ってから次のノードを手繰り直す方法 イテレータの空間効率がO(1)になる代わりにサクセッサの時間効率がO(log n)になる。 三つ目は木構造の各葉っぱに次の葉っぱへのポインタを書いておく方法 イテレータの空間効率がO(1)、サクセッサの時間効率がO(1)になる代わりに葉要素のサイズがO(1)増える。
140 名前:名無しさん@そうだ選挙に行こう mailto:sage [2015/12/14(月) 11:57:14.44 ID:S7hw1GZs.net] イテレータってそんなにたくさん使うもんじゃないし、一つ目がいいかな、俺的に。
141 名前:uy ◆Qawu9.2l1E [2015/12/14(月) 15:02:59.78 ID:WIf5dtaV.net] それ種類じゃなくて、全部組み合わせて実装したほうが汎用的じゃねーの class A attr_accessor :up , :key , :list , :data end 最低でも1と3のup listは無ければ木構造にならないだろ 君の考えは prev(up) と next(list) になってる
142 名前:名無しさん@そうだ選挙に行こう mailto:sage [2015/12/14(月) 16:34:38.86 ID:S7hw1GZs.net] 全部組み合わせたほうが汎用的? 何を言ってるかよくわからん
143 名前:uy ◆Qawu9.2l1E [2015/12/14(月) 21:12:22.29 ID:WIf5dtaV.net] まず、ツリーにしたらそれはイテレータとは呼ばないから ただのツリーを走査する為の関数に過ぎない 「イテレータ」にしか使用できないツリーじゃなくて 一通りの事に使用できるツリークラス作れば?って話
144 名前:デフォルトの名無しさん mailto:sage [2015/12/14(月) 21:30:28.83 ID:lwFUcSQC.net] function NodeIterator(node, childNodesName) { this._stack = [node]; this._name = childNodesName; } NodeIterator.prototype.hasNext = function() { return this._stack.length > 0; } NodeIterator.prototype.next = function() { var node = this._stack.pop(); if (node) { for (var i = node[this._name].length -1; i > -1; --i) { this._stack.push(node[this._name][i]); } } return node; } ノードの親や深さも欲しい時は、スタックに積むノードをオブジェクトでラップして親の参照や深さを持たせればいいかも
145 名前:デフォルトの名無しさん mailto:sage [2015/12/14(月) 22:23:44.30 ID:S7hw1GZs.net] uyのイテレータの定義がさっぱりわからん。 俺はC++STLのイテレータを想像しているんだが。 uyの言ってるイテレータはなんのイテレータなんだ?
146 名前:デフォルトの名無しさん mailto:sage [2015/12/14(月) 23:47:42.33 ID:S7hw1GZs.net] uyが言ってるのはツリーで実装されたイテレータということかな? 俺が言いたいのはツリーを巡回するイテレータなんだが?
147 名前:デフォルトの名無しさん mailto:sage [2015/12/15(火) 02:12:24.45 ID:1v1TladX.net] コレクションを操作するのがイタレータ
148 名前:uy ◆Qawu9.2l1E [2015/12/15(火) 02:28:13.41 ID:hKbS74r3.net] センスないと無理
149 名前:デフォルトの名無しさん mailto:sage [2015/12/15(火) 02:42:41.61 ID:1v1TladX.net] >>147 それを言うなら走査だろと自分で突っ込んどく
150 名前:uy ◆Qawu9.2l1E [2015/12/15(火) 02:44:41.16 ID:xpC/Gts5.net] 例えば [1,2,3,4] ← これをイテレートするのがイテレータだろ? ツリーは [1,2,[3,4,[5,6]]] ← これをイテレートしたいのが作りたいイテレータだろ? 下のはイテレータと表現するまでもなくプログラム中でツリー構造が必要になって、 「ツリークラス」ってのを定義した事あれば、そんなのは標準実装しているレベルのものだから、わざわざツリーのイテレータなんていう半端なものは誰も作らない 作る順序的にまずはイテレータのツリー化じゃなくて、ツリークラスの定義 考えが追いつかないなら好きな順序で作れば良いけど
151 名前:デフォルトの名無しさん [2015/12/15(火) 07:32:58.54 ID:1zInVUKk.net] ツリーオブジェクトにtoArray()メソッドを用意すれば すべて解決すると思うの。
152 名前:デフォルトの名無しさん mailto:sage [2015/12/15(火) 10:44:59.05 ID:kfL23r5/.net] 大富豪プログラミングだなtoArray() ツリーなんかはサイズが非常にデカくなることがしばしばあるぞ。
153 名前:デフォルトの名無しさん mailto:sage [2015/12/15(火) 18:13:10.16 ID:kfL23r5/.net] tAo.kQ2STk ってテレンスタオから取ってんの?
154 名前:デフォルトの名無しさん mailto:sage [2015/12/15(火) 18:56:51.85 ID:kfL23r5/.net] >>150 汎用的なツリークラス作れって言ってんのか? javascriptみたいになるんじゃね?
155 名前: ◆tAo.kQ2STk mailto:sage [2015/12/15(火) 19:28:58.56 ID:1tm7yObV.net] >>153 違うよ。人間が読める某文字列をキーにしたらその酉が作れる。 ところでさ、どうでも良いんだけど 今話題にしてるのは木構造 >>141 が示したデータ構造は無向グラフ ・・・・・・だよね?
156 名前:デフォルトの名無しさん [2015/12/15(火) 22:38:36.35 ID:WpFCIHcQ.net] ツリーじゃね
157 名前:デフォルトの名無しさん mailto:sage [2015/12/15(火) 22:42:50.33 ID:kfL23r5/.net] 参照が木構造になってるかグラフになってるかなんて実行時に決まることじゃないのか?
158 名前:デフォルトの名無しさん [2015/12/16(水) 03:41:52.77 ID:L2apS2Qu.net] 何だこの池沼w
159 名前:デフォルトの名無しさん [2015/12/16(水) 09:38:17.31 ID:VSvjkteq.net] ごめん
160 名前:デフォルトの名無しさん mailto:sage [2015/12/16(水) 21:37:56.27 ID:OpCUYLL/.net] いいってことよ
161 名前:デフォルトの名無しさん [2015/12/17(木) 17:19:47.96 ID:Szn4FINI.net] Elixir再帰おもろい confreaks.tv/videos/elixirconf2014-introduction-to-elixir-for-rubyists
162 名前:デフォルトの名無しさん [2015/12/18(金) 23:27:00.37 ID:95zCi6v5.net] プログラマはMacを使ってるってマジ? hayabusa3.2ch.net/test/read.cgi/news/1450395043/
163 名前:デフォルトの名無しさん [2015/12/19(土) 15:12:57.98 ID:iG82T79N.net] メモメモ izumi-math.jp/M_Harada/kinou_o/kinou_o.pdf examist.jp/mathematics/recurrence-formula/suitei/ mathtrain.jp/fibonacci
164 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 16:17:36.19 ID:qhiLE2sk.net] 制御では、実行時間が読めないアルゴリズムは使いにくい。
165 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 16:48:17.67 ID:mZAnd63z.net] 再帰と繰り返しは相互に変換可能なんだから、再帰で実行時間が読めないならば、繰り返しでも読めない。 こんなじょうしきも知らないの?
166 名前:デフォルトの名無しさん [2015/12/19(土) 20:02:11.53 ID:owy4KRbC.net] ごめん
167 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 20:16:05.69 ID:hx9j/3Ds.net] 再帰はシステムダウンの危険がある。 処理速度もはるかに遅くなる。 再帰の場合には、こうした実行時間が読めない特有の問題点がある。
168 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 22:02:48.92 ID:EjHtX5K0.net] > 再帰はシステムダウンの危険がある。 そう言う環境ならば、システムダウンの可能性は繰り返しでもある。 > 処理速度もはるかに遅くなる。 ヘボが作った繰り返しは再帰よりはるかに遅い。
169 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 22:20:57.65 ID:ZeO9ImyW.net] >>168 繰り返しと再帰はいっしょなんだろ?
170 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 22:22:37.57 ID:EjHtX5K0.net] >>169 お前、バカなんだろ。
171 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 23:26:42.72 ID:25MZJC6Y.net] 末尾再帰に対応した言語が少ないからなぁ
172 名前:デフォルトの名無しさん mailto:sage [2015/12/19(土) 23:29:13.06 ID:srVmyYNw.net] 普通の言語は対応してる 変な言語は使うもんじゃない
173 名前:uy ◆Qawu9.2l1E [2015/12/20(日) 01:30:16.73 ID:cCXQYS6+.net] # 1 def f if 条件 処理 else f() end end # 2 def f if 条件 f() end end # 3 def f case 条件 when LABEL f() end end 末尾再帰されるパターンわからない奴wwwwwwwwwwwwっうぃる?
174 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 01:48:28.93 ID:XCzWC+ME.net] >>172 Java「…」
175 名前:デフォルトの名無しさん [2015/12/20(日) 12:14:12.80 ID:8RLYRFXT.net] >>175 漸化式
176 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 12:15:13.29 ID:37nsyMmy.net] それは、無限再帰
177 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 14:49:43.30 ID:zNzoBoA2.net] ID:EjHtX5K0のような白痴ばかりだから 再帰厨だと馬鹿にされることになる。 再帰を愛して使うんだったら、 ループ版にはない深刻なデメリットがある事ぐらいちゃんと注意した上で、 効率や安全性を無視したプログラミングを楽しむべき。
178 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 17:18:50.85 ID:37nsyMmy.net] 繰り返しの唯一の利点は回数の制御が再帰よりも容易であること。 これ以外の利点はない。 バカにはそれが理解できないらしいが。
179 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 17:26:49.52 ID:8RLYRFXT.net] 馬鹿には出来ませんね
180 名前:デフォルトの名無しさん [2015/12/20(日) 18:23:24.49 ID:/qKlyz5E.net] ごめん
181 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 19:26:33.84 ID:37nsyMmy.net] 再帰はID:zNzoBoA2のように低知能には理解不能という弱点があるけど ID:zNzoBoA2のような低知能の出現率は低いので全然問題無い むしろ低知能者を検出試験としてのメリットの方が大きい
182 名前:デフォルトの名無しさん [2015/12/20(日) 22:01:31.82 ID:ywvYIxL3.net] 再帰苦手だから何でもかんでもループ使ってすまん
183 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 22:05:01.79 ID:A/4Tj+iv.net] flattenとか難しいよね
184 名前:デフォルトの名無しさん mailto:sage [2015/12/20(日) 22:51:10.83 ID:zNzoBoA2.net] もし再帰が理解出来たつもりなら、ちゃんとループに直せるぐらいのプログラミング技術は備えなくちゃ。 最低でもそれくらいの技術や知能が無ければ 再帰を楽しむことはできないよ。
185 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 02:17:48.47 ID:EKnooMo4.net] 「再帰には深刻なデメリットがある」キリッ なんて発言する低知能人は再帰を理解してるはずが無い、理解不能なものを怖れている。未開人と同じ。
186 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 09:54:25.69 ID:S8kWm1db.net] ループを恐れるのは、ループにするだけの知識・経験を欠いているから。 その程度じゃあプログラミングの世界からすぐに消えるだけの存在。 再帰厨は、現実で満たされないのでスレで妄想を垂れ流すことしかできないクズ。
187 名前:デフォルトの名無しさん mailto:sage [2015/12/21(月) 10:52:48.60 ID:zel3cCjW.net] 関数内にjmpも好き勝手にやるタイプだからどうとも言わんけど、 再帰否定派はまさか単一のアーキテクチャの話してないよな? アルゴリズムとして再帰がイケてないって話だよな?
188 名前:デフォルトの名無しさん [2015/12/21(月) 14:23:04.48 ID:MyhUNItP.net] そうなのか?
189 名前:デフォルトの名無しさん [2015/12/21(月) 14:51:29.83 ID:EKnooMo4.net] >>186 必死で再帰を否定しているバカを弄っているだけで、繰り返しを否定しているわけでは無い やっぱり低知能なんだな。
190 名前:デフォルトの名無しさん [2015/12/21(月) 18:43:17.30 ID:u4st+H+L.net] みなさん、これが「弄ってるって言いたいバカ」ですw
191 名前:デフォルトの名無しさん [2015/12/22(火) 08:48:59.73 ID:kujr6tD9.net] 迷信を信じ込んで再帰を否定してるバカが 深刻なデメリット(爆笑)、例えば > 処理速度もはるかに遅くなる。 を、実証すればスレ終了するのに。
192 名前:デフォルトの名無しさん mailto:sage [2015/12/22(火) 11:16:51.41 ID:4uBr+2Cy.net] >>191 そういう超基本的なプログラミング知識が無いのに なんでプログラム板にいるの? そもそもプログラミング経験無いだろ、お前。
193 名前: ◆tAo.kQ2STk mailto:sage [2015/12/22(火) 12:54:32.04 ID:S5fGjlFA.net] 異様に伸びてると思ったら深刻な問題祭りかい いくらでも例外は挙げられるけど 再帰で書こうがループで書こうが計算時間や空間計算量はそんなに変わらんから 書きやすく、読みやすい方で書いたほうが良いんじゃない? そんなに変わらないって言うのは十分大きな入力に対して精々2〜3倍以下に納まるって意味だからね。 1時間掛かる処理を20マイクロ秒速くする為にごちゃごちゃ書き換えるのは結構な事だけど。
194 名前:デフォルトの名無しさん mailto:sage [2015/12/22(火) 14:08:14.84 ID:dkSLpih8.net] はるかと言っても所詮定数倍でしょ。 しかも一桁違うケースは 関数呼び出しがやや高価なスクリプト系の言語でもほとんどないでしょ。
195 名前:デフォルトの名無しさん mailto:sage [2015/12/22(火) 17:31:14.37 ID:qPz15M1W.net] >>193 いやね,絶対的に再帰でないと書けない,いや非常に書きにくいものはあるのは確かで. たとえば代数式の解析を非再帰的で記述しろといわれると「はたして出来るのか??」と逡巡してしまう. こういう話題があまり発展しないのはどうしたわけですかね 関係ないけどquick-sort を三項演算子とコンマ演算子で書く話題,誰か‥私は挫折した‥
196 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/22(火) 18:25:40.50 ID:/7VurpfC.net] 再帰の深刻なデメリットと言えば、コンパイラ設計者が甘えてる事によってバグを触ったり 異常に速度遅くなるパターンが放置されてたりする事 なんの言語とは言わないけど
197 名前:デフォルトの名無しさん mailto:sage [2015/12/22(火) 19:03:19.84 ID:8Du/ashj.net] それは再帰のデメリットではなくそういうクソコンパイラしかない言語のデメリット
198 名前:デフォルトの名無しさん [2015/12/22(火) 22:57:38.64 ID:kujr6tD9.net] >>192 能書きはいいからとっとと実証しろ。超基本的な知識なんだろ。 「はるかに遅い」とか言ってるバカ仲間のサイトでも良いぞ。
199 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/22(火) 23:43:59.28 ID:qcwFiUkP.net] >>197 なんか食パン裏返してこっちが表だとか必死に言ってるようなレスだな
200 名前:デフォルトの名無しさん mailto:sage [2015/12/22(火) 23:48:59.13 ID:8Du/ashj.net] >>199 食パン裏返してんのはお前のほうだよw
201 名前:デフォルトの名無しさん [2015/12/22(火) 23:51:52.68 ID:2TsBrERG.net] >>198 へい。再帰が130倍時間がかかるエビデンス。 www.fastpic.jp/images.php?file=1406113032.png
202 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 01:07:26.60 ID:xKy7nhKt.net] 食パンの裏はどっち側だよ
203 名前:デフォルトの名無しさん [2015/12/23(水) 01:25:49.85 ID:zjRNfIWb.net] >>201 こうするとなかなか興味深いことになるね。 本当に興味深いと思ってるだけで他意は無いよ。 fun_rec(){ if [ $1 -gt 5000 ] ; then time fun_for return fi fun_rec $(( $1 + 1 )) }
204 名前:デフォルトの名無しさん [2015/12/23(水) 02:04:18.65 ID:3NYqkGXc.net] >>203 たしかにおもしろい。 再帰の深さに比例して時間がかかる。 再帰が深くなると処理に時間がかかるようになるのか、 別の時間を測ってしまっているのか。わからん。これはわからん。
205 名前:デフォルトの名無しさん [2015/12/23(水) 07:21:41.71 ID:fM9ORKUP.net] >>201 必死で再帰否定してるバカは知能が低いというエビデンス乙 シェル関数は呼び出しのたびに名前解決するのでペナルティが大きい
206 名前:デフォルトの名無しさん [2015/12/23(水) 07:28:38.71 ID:fM9ORKUP.net] Cの場合は入った時にフレーム作成と出る時にフレーム復元 c86なら、レジスタ操作4ステップ(複合命令なら2ステップ)だ。 名前解決なんかリンク時に終わってる。
207 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 08:47:35.90 ID:2F8TsTF+.net] 最近の関数呼び出しは引数をスタックに積まずにレジスタ渡しみたいだから 再帰で何段ネストしちゃっててもレジスタに収まってる限りは爆速なんじゃね
208 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 08:59:40.61 ID:r+tlUph/.net] 名前解決まで計算時間に含めるなら もう再帰云々じゃなくて長大な再帰なしの一つの関数で全部こなせって話になるんだがな >>207 いや、そうはならない。 レジスタの退避が必要になるから、自己再帰するならどっちにしても同じだけpush/popは必要になる。 最適化が掛かったらその限りじゃないけど。
209 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 09:02:09.80 ID:QhR+qVh6.net] >>205 呼び出しだけじゃなく参照もね、iの。 localでもスタックフレームなめてるのかな?
210 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 09:10:56.81 ID:2F8TsTF+.net] >レジスタの退避が必要になるから そうかなー
211 名前:デフォルトの名無しさん [2015/12/23(水) 09:15:53.17 ID:fM9ORKUP.net] >>209 スタッフフレームは再帰に必要なステップだから、再帰のペナルティとしてあえて受け入れた。 シェルスクリプトを持ち出した時点で「スタックは容量制限が厳しい(場合もある)リソース」 を自分で否定しちゃうところが再帰否定してるバカが低知能であるもう一つのエビデンス(笑) (場合もある)を知らないのか、教わってないのか知らないが、全ての場合だと思い込んでるところもバカの、特徴だね。
212 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 09:50:24.66 ID:r+tlUph/.net] >>210 再帰で書いた何の変哲もないフィボナッチ関数をビルドしたケースを示すよ https://gist.github.com/pixie-grasper/ba2d0ade523b8599c182 gccではr12を、clangではraxを、rbp/rbxの他に退避してるのが分かる。
213 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 11:20:43.15 ID:2F8TsTF+.net] 対比先もレジスタにすればいいのにね
214 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 11:25:42.60 ID:r+tlUph/.net] そんな事をすると 既に退避させてある値を別なレジスタに退避させてから、退避させたい値を退避するコードを吐く羽目になるけど レジスタが最低でも加算無限個無いと出来ないからね。仕方ないね。
215 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 11:53:11.24 ID:/Snk+v/P.net] externしていないstatic関数とかならレジスタ渡しもふつうにある。 もちろんCランタイム・コンパイラによる
216 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 12:07:45.20 ID:r+tlUph/.net] >>215 いつの時代の話をしてるのか分からんのだけど、所謂Intel系の64bit環境(amd64)だとレジスタ渡しがデフォルトだよ。 https://en.wikipedia.org/wiki/X86_calling_conventions#List_of_x86_calling_conventions
217 名前:デフォルトの名無しさん [2015/12/23(水) 12:46:44.21 ID:2bKYe5U2.net] >>204 bashはダイナミックスコープだから再帰の深いところでは 変数の参照に時間がかかるのかな。いまはその辺を疑ってる。
218 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/23(水) 13:07:16.81 ID:cGrC7qed.net] >>197 w
219 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 16:35:42.36 ID:u0B3Sjd8.net] だいたい再帰で問題が無いなんて クイックソートで再帰が役に立たない事すら知らないってことか? 処理件数が増えたら速度の差なんて、何万倍どころじゃないし。
220 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 16:37:36.04 ID:xKy7nhKt.net] >>219 何が言いたいのかわからん…
221 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/23(水) 16:45:18.40 ID:uhnrlQdn.net] >>219 ファーwwwwwwwwwwwwwwwwwwwwwwwwwww
222 名前:デフォルトの名無しさん [2015/12/23(水) 17:05:56.20 ID:fM9ORKUP.net] >>219 じゃ、これを10000倍高速化して実証してよ。 svnweb.freebsd.org/base/stable/10/lib/libc/stdlib/qsort.c?revision=256281&view=markup
223 名前:デフォルトの名無しさん [2015/12/23(水) 17:15:03.86 ID:2bKYe5U2.net] >>222 きったねえソースだな。どこの糞コード持ってきてんだ。 見せてやるよ、本気のクイックソートってやつをな。 void qsort(int a[], int left, int right) { int i, last; if (left >= right) return; swap(a, left, (left + right) / 2); last = left; for (i = left + 1; i <= right; i++) if(a[i] < a[left]) swap(a, ++last, i); swap(a, left, last); qsort(a, left, last - 1); qsort(a, last + 1, right); }
224 名前:デフォルトの名無しさん [2015/12/23(水) 17:27:00.65 ID:fM9ORKUP.net] >>223 10000倍高速化の比較対象はそれでも良いぞ。
225 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 17:56:16.45 ID:ZCUCTd42.net] 一万倍とかwwww どこをどうやったら一万倍差がつくんだ
226 名前:デフォルトの名無しさん [2015/12/23(水) 18:11:01.01 ID:2bKYe5U2.net] >>225 クイックソートの最悪の時間計算量はn^2なので データによってはとても大変なんよ。
227 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/23(水) 18:27:35.24 ID:PjxVSF2U.net] アルゴリズムの抽象化に静的言語使うチンパンとか話にならないから(´・ω・`) def qsort a , left , right return if left >= right swap a , left , (left + right) / 2 last = left (left + 1).step(right) do |i| if a[i] < a[left] swap a , last+=1 , i end end swap a , left , last qsort a , left , last - 1 qsort a , last + 1, right end
228 名前:デフォルトの名無しさん [2015/12/23(水) 18:50:34.28 ID:fM9ORKUP.net] >>225 最低10000倍ね。笑 >>219 >処理件数が増えたら速度の差なんて、何万倍どころじゃないし。 あ、小学生のように0.0001万倍とか言い逃れるかも。爆笑
229 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 21:36:40.93 ID:L95mHKNc.net] >>227 hissi.org/read.php/tech/20151223/UGp4VlNGMlU.html
230 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 21:47:18.77 ID:ZCUCTd42.net] 万倍高速化はよwww
231 名前:デフォルトの名無しさん [2015/12/23(水) 22:10:25.42 ID:fM9ORKUP.net] ID:u0B3Sjd8 10000倍の高速化まだ? 常識的で簡単そうな口ぶりだったけど。
232 名前:デフォルトの名無しさん [2015/12/23(水) 22:12:02.95 ID:fM9ORKUP.net] 万は間違いだったとしても、最低でも倍速は楽勝なんだろ。
233 名前:デフォルトの名無しさん [2015/12/23(水) 22:29:26.28 ID:zjRNfIWb.net] >>232 速度以前に >>223 は簡単にスタックオーバーフローするよ。 それを防ぐ方法を教えてやってよ。
234 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 22:33:54.64 ID:QhR+qVh6.net] >>233 繰り返し版が明示的スタックに使うヒープと同サイズに マシンスタックの上限を変更すればOK
235 名前:デフォルトの名無しさん [2015/12/23(水) 22:55:30.83 ID:zjRNfIWb.net] いや、君に言ったわけじゃないし、最適化を教えてやれってことなんだけど。
236 名前:デフォルトの名無しさん [2015/12/23(水) 23:35:43.46 ID:fM9ORKUP.net] >>233 バカなの? >>222 読めないの? 10000倍の高速化まってんだから、くだらねー横槍入れないように。 お前が10000万倍高速化するならかまってやんよ。
237 名前:デフォルトの名無しさん mailto:sage [2015/12/23(水) 23:43:11.94 ID:QhR+qVh6.net] >>226 繰り返しか再帰かに関係ないがな。 pivotの選び方次第だろ。 それは明示的にスタック使う繰り返し版クイックソートでも同じ。
238 名前:デフォルトの名無しさん [2015/12/23(水) 23:58:42.12 ID:2bKYe5U2.net] >>237 あたりまえ
239 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 01:02:26.01 ID:aanAAc0G.net] >>238 >>225 に対するレスとして >>226 はおかしいだろ。 気にならんのか?
240 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 01:08:56.14 ID:VDgCwlJn.net] >>239 何を言っているのか意味がわからない…
241 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 06:51:58.79 ID:2ShnOfV/.net] >>240 最悪パターンでもよいから、10000倍高速化しろよ。
242 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/24(木) 08:02:14.94 ID:Ecjqx/Av.net] スキルない人間をいくら叩いても何も出てこないのに ここは動物園かよ
243 名前:デフォルトの名無しさん [2015/12/24(木) 08:55:59.49 ID:Q6U3kr4L.net] 黒魔術師は再帰関数が大好き
244 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 09:09:51.37 ID:Zs2o0pyD.net] 黒魔術師はマクロを生成するマクロも大好き
245 名前:デフォルトの名無しさん [2015/12/24(木) 11:57:48.07 ID:2ShnOfV/.net] 再帰を必死に否定しているバカの主張 1 スタックが制限の厳しいリソースである環境が全てだと思い込み、再帰の致命的なペナルティだと主張する 2 シェル関数呼び出しをエビデンスとして、再帰が130倍遅いと主張する 3 再帰版のqsortは数万倍遅いと主張するが、数万倍速いはずの非再帰版を示さない 4 知能が低く再帰を理解できない。それをもって再帰は難解と主張する。
246 名前:デフォルトの名無しさん [2015/12/24(木) 14:54:05.30 ID:QIUsopJK.net] >>245 そうやって執拗に絡むのもはっきりいって馬鹿丸出しだよ。 せっかく相手がクイックソートのコードを書いてくれたんだから そのコードの問題点を指摘する方が賢そうに見えると思ったんだけどね。
247 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 16:38:25.55 ID:2ShnOfV/.net] >>246 さらなる意味不明なバカが出てきたな。 コード出したのは再帰を必死で否定してるバカじゃないぞ。
248 名前:デフォルトの名無しさん [2015/12/24(木) 17:26:51.73 ID:ri4CJahT.net] 最初期は再帰をサポートしてなかった計算言語があるらしい
249 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 18:44:44.88 ID:W/SZtGXt.net] 今はハードウェアレベルで再帰が実装されてるからな。 それを思えばいかに再帰が本質的にプログラミングに必要とされてるかってことだな。
250 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 20:04:26.21 ID:aanAAc0G.net] 計算可能性を探求する試みにおいて最初に出たのが、 エルブラン・ゲーデルの一般帰納関数だからね。 次がラムダ計算。 その次がノイマン型計算機直系の先祖であるチューリングマシン。
251 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 20:37:54.33 ID:Hny3MC9I.net] 10000倍だっておとなしいぐらい。 再帰だと落ちまくるから∞倍だって当たり前だろ。
252 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 20:46:14.21 ID:W/SZtGXt.net] メモリ足りないなら動かないのは再帰もループも変わらんだろ。 ループのほうが本質的にメモリ使用量少なくなるとかなら話は変わってくるが。
253 名前:デフォルトの名無しさん mailto:sage [2015/12/24(木) 20:58:31.47 ID:2ShnOfV/.net] これだね。本当に知能が低い。 > 1 スタックが制限の厳しいリソースである環境が全てだと思い込み、再帰の致命的なペナルティだと主張する
254 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 18:57:10.38 ID:IqCVGu/8.net] >再帰もループも変わらんだろ。 なんで試してみないんだ? 再帰とループでクイックソート ループ方式なら、データが何千万件あろうと無問題
255 名前:デフォルトの名無しさん mailto:sage [2015/12/25(金) 19:44:32.39 ID:TZMq+uAI.net] >>254 ループのソース晒してみろや
256 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/26(土) 05:53:41.97 ID:QzXIU7/C.net] 覚えたての知識を使ってレスバトルするだけのスレなんていらねーから
257 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 08:33:15.25 ID:oIXuKyHb.net] いらないスレを使って自分の意見を垂れ流すとか有効活用乙としか
258 名前:デフォルトの名無しさん [2015/12/26(土) 10:19:35.68 ID:EXUTS9i+.net] そういう初心者の遊び場もあっていいと思うけどなあ
259 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 12:54:13.38 ID:KD7gR2Cz.net] >>252 再帰の方は、関数呼び出し大量に発生するから、リターンアドレス待避とレジスタ待避に、メモリーが喰われる。
260 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 13:36:54.41 ID:oIXuKyHb.net] >>259 ループの方は今どの範囲についてソートしているのかという情報が大量に発生するから同じ議論が成り立つ訳だが。
261 名前:デフォルトの名無しさん [2015/12/26(土) 13:40:32.70 ID:6n5NtJkM.net] >>260 ループはヒープ、再帰はスタック つまり、ヒープとスタックがぼくらを助けてくれるんだ!
262 名前:sage [2015/12/26(土) 15:02:23.21 ID:Igcba1qr.net] >>254 >>222 (再帰版qsort)で5000万件ソートしてみた。楽勝で終了する。 必死で再帰を否定しているバカが低知能だという事がまた証明されてしまった。 頭が悪いって本当にかわいそう。
263 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 16:45:09.37 ID:YV12MLKo.net] >>262 再帰版でうまくいくのだったら非再帰版ではもっとうまくいく,という発想はないのかね?
264 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 16:59:02.38 ID:oIXuKyHb.net] >>263 うまくいくって言ったって高々定数倍速くなるだけだろ? 非再帰版を書いたり保守したりするコストより新しい速いマシンを買ったほうが安く上がるって発想は無いのかね?
265 名前:デフォルトの名無しさん [2015/12/26(土) 17:27:47.02 ID:Igcba1qr.net] >>263 知能障害者って本当にかわいそう。 5000万件でソート出来てるってことは、「再帰はスタックあふれる」という迷信が嘘だという発想には至らないのかね。 クイックソートの深さの制御はすでに研究し尽くされてて、全然問題ないんだよ。
266 名前:デフォルトの名無しさん [2015/12/26(土) 17:37:15.54 ID:Igcba1qr.net] あっ、繰り返し版は10000倍速いんだっけ? (爆笑) 早く実装コードみたいなあ。
267 名前:デフォルトの名無しさん [2015/12/26(土) 18:11:47.33 ID:6n5NtJkM.net] >>266 そんなに実装したいのなら教えてしんぜよう。 5000万件で >>201 を実行してみたまえ。 再帰呼出しというのは効率が悪いとても頭の悪いやり方なんだよ。
268 名前:デフォルトの名無しさん [2015/12/26(土) 18:13:42.40 ID:EXUTS9i+.net] シェルスクリプトを証拠として使うのは笑ってしまうからやめろ
269 名前:デフォルトの名無しさん [2015/12/26(土) 18:16:50.75 ID:6n5NtJkM.net] >>268 反論できないのな?じゃあお前の負けってことで。
270 名前:デフォルトの名無しさん [2015/12/26(土) 18:22:25.08 ID:EXUTS9i+.net] 野次飛ばしてる観客相手に勝利宣言も笑うからやめろ おまえはプロレスのヒール役か
271 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 18:26:32.21 ID:gy7QXsCA.net] >高々定数倍 そんな安全なもんじゃあねぇ。 データが増えれば差も増大。
272 名前:デフォルトの名無しさん [2015/12/26(土) 18:38:59.41 ID:Igcba1qr.net] >>267 ぷぷぷぷ 知能障害者は>>201 をクイックソートと呼ぶのか?
273 名前:デフォルトの名無しさん [2015/12/26(土) 18:41:57.44 ID:Igcba1qr.net] >>271 ミジメすぎるぞ。クイックソートのスタック消費量はlog nに抑える事が可能。 こんな基本的な事を知らないから数千万件はソート出来ない。キリッ とか、赤面な発言しちゃうんだよ。
274 名前:デフォルトの名無しさん [2015/12/26(土) 18:47:36.31 ID:Igcba1qr.net] ちなみにglibcのqsort(これは非再帰)も同じ手法で自前スタックを管理してる 知能が低いって本当にかわいそう。 https://sourceware.org/git/?p=glibc.git;a=blob_plain;f=stdlib/qsort.c;h=04c25b984f74a8f738233cc6da8a738b6437833c;hb=b8079dd0d360648e4e8de48656c5c38972621072 /* The next 4 #defines implement a very fast in-line stack abstraction. */ /* The stack needs log (total_elements) entries (we could even subtract log(MAX_THRESH)). Since total_elements has type size_t, we get as upper bound for log (total_elements): bits per byte (CHAR_BIT) * sizeof(size_t). */
275 名前:デフォルトの名無しさん [2015/12/26(土) 19:02:41.83 ID:6n5NtJkM.net] >>272 バカかお前は。ボウフラサイズの脳ミソしか搭載してないのか? ただの繰り返しでさえ130倍の差があるのだから クイックソートを実装したらそれ以上の開きがあるのは自明だろうが。
276 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 19:08:33.46 ID:YV12MLKo.net] >>273 log n は発散するんだが‥
277 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 19:09:07.52 ID:oIXuKyHb.net] >>275 バカはお前だ。シェルスクリプトでクイックソートを実装するなんて誰がするか。 sortプログラムを使え。 ちなみにシェルスクリプトの場合、関数呼び出しはそれ自体がスタックの深さをnとしてO(n^2)くらいの計算時間を持つっぽい。
278 名前:デフォルトの名無しさん [2015/12/26(土) 19:09:41.46 ID:Igcba1qr.net] >>275 ぷぷぷ。知能障害は本当にかわいそう。 qsortの繰り返し版は関数呼び出しの代わりに自前でスタック管理しなきゃならないんだよ。 10000倍高速化の実証コードはよ。
279 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 19:10:23.62 ID:oIXuKyHb.net] >>276 確かに、うん、確かに、非常にゆるやかに発散するね。 n=2^64としてもlog nは64だけどね。 定数と変わんないレベルだよね。
280 名前:デフォルトの名無しさん [2015/12/26(土) 19:11:25.60 ID:6n5NtJkM.net] >>277 実装できないのな?無理なのな?はい論破。
281 名前:デフォルトの名無しさん [2015/12/26(土) 19:14:27.33 ID:6n5NtJkM.net] >>278 >>201 がすべてを物語っている。 これが何よりの証拠。再帰がとてつもなく効率が悪いことを つまびらかにしてみせた。ここに来て見てみぬふりは通用しない。 エビデンスもきちんと示されている。もはや知らぬ存ぜぬでは済まされない。
282 名前:デフォルトの名無しさん [2015/12/26(土) 19:14:30.05 ID:Igcba1qr.net] >>280 何万倍も高速だっ。キリッ。 って主張してる奴に実証責任があるんだが ガイジにはわからないの?
283 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 19:16:21.04 ID:oIXuKyHb.net] >>280 練習のためなら兎も角、シェルスクリプト「だけ」でソーティングなんてやる意味が無い。 ループだろうと再帰だろうとね。 理由は遅いから。 ループで組んだとしても、非常に遅いから、実装するだけの意味が無い。 sortを呼べばCで書かれた非常に高速でスケーラブルなソーティングが出来るから、普通はそっちを使う。 さぁ君は一体何を論破したというのだい?
284 名前:デフォルトの名無しさん [2015/12/26(土) 19:16:31.66 ID:Igcba1qr.net] >>281 障害児くん 10000倍と130倍って、どっちがどれだけ大きいかわかる?
285 名前:デフォルトの名無しさん [2015/12/26(土) 19:17:31.65 ID:6n5NtJkM.net] >>282 >>201 で完全に証明してみせた。 反証する責任がお前にあるとは俺は思わないよ。 俺は自分の都合の良いように他人に責任を押し付けるなんて 卑劣な真似はできない。俺はただの真実の探求者。
286 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 19:21:05.64 ID:oIXuKyHb.net] >>281 ちょっと試せば分かることなんだけど、シェルスクリプトに於いて再帰の実行速度は 呼び出し深さnに対してO(n^2)くらい掛かる。 で、クイックソートの呼び出しの深さは要素数mについてO(log m)なので O(log^2 m)の計算時間が再帰だけで掛かることになる。 つまり全体の計算量はO(m log^2 m)だ。 一方でループの場合にはO(m log m)掛かるから、その差はO(log m)だ。 この値はm=5000万、底2として約25だ。 つまり、理論上は再帰とループで25倍の差が開きうる。 そして君は10000倍違うと言う。 残り400倍はどうやって稼ぐんだい?
287 名前:デフォルトの名無しさん [2015/12/26(土) 19:21:48.42 ID:6n5NtJkM.net] >>284 ボウフラ並みの脳ミソをメダカにでも食われたのかお前。 頭悪いにも程があるだろうが。こんな鶏頭野郎の 相手する俺の身にもなれ。なんていいやつなんだ俺。 聖人君子としか言いようがないわ。>>201 は5000回の繰り返しだ。 5000回の繰り返しでさえ130倍の開きがあるのだから回数が 増えれば差は開く一方だ。だから、>>267 で5000万と言ったのだよ。
288 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 19:23:23.36 ID:PvF8tuZ2.net] 霊がいるのかいないのかは判りませんが 人間の目が無いものを見ることがあるのは事実です
289 名前:デフォルトの名無しさん [2015/12/26(土) 19:23:40.75 ID:EXUTS9i+.net] 差は開くだろうけど比も開くのか?
290 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 19:23:44.50 ID:oIXuKyHb.net] >>287 5000回の再帰で130倍の差が開いた訳じゃなくて、 深さ5000の関数呼び出しで130倍の差が開いたって事を理解してる? 5000万要素のクイックソートなら最良のケースで深さ25の再帰だからね? 130倍どころか2倍にもならないからね?
291 名前:デフォルトの名無しさん [2015/12/26(土) 19:23:54.44 ID:6n5NtJkM.net] >>286 クイックソートを実装して試したのか?あ? だれが実装するかと言っていたのと矛盾するだろうが。 つまり、君は嘘をついている。ゆえに俺が言ってることの方が正しい。はい論破。
292 名前:デフォルトの名無しさん [2015/12/26(土) 19:26:45.13 ID:6n5NtJkM.net] >>289 当たり前だろ。小さな町の町長が東京の都知事になって 仕事をこなせると思うか?数が増えるほどにコストは増大するんだ。劇的にな。劇的にだ!
293 名前:デフォルトの名無しさん [2015/12/26(土) 19:29:40.16 ID:Igcba1qr.net] 障害児発作を発症中
294 名前:デフォルトの名無しさん [2015/12/26(土) 19:31:02.17 ID:EXUTS9i+.net] >>292 すまん、その例えどこまで信用していいか分からないからそういうの語るときは式でお願い
295 名前:デフォルトの名無しさん [2015/12/26(土) 19:31:21.63 ID:6n5NtJkM.net] >>290 ヤってみたのか?ヤったのか?ヤってから言えや! さっさとクイックソートのコード提示しろよ! いつまでグズグズ言ってりゃ気が済むんだ 俺はお前がクイックソートをシェルで実装するのをあとどれだけ待てばいいわけ?
296 名前:デフォルトの名無しさん [2015/12/26(土) 19:32:53.62 ID:Igcba1qr.net] >>295 再帰は数万倍遅いといったお前が実証しろよ
297 名前:デフォルトの名無しさん [2015/12/26(土) 19:33:00.02 ID:6n5NtJkM.net] >>294 log2・5000 : log2・5000 ? 30 ⇒ log2・50000000 : 10^4 ? A QED.
298 名前:デフォルトの名無しさん [2015/12/26(土) 19:34:26.18 ID:Igcba1qr.net] 1万倍高速なクイックソートはよ
299 名前:デフォルトの名無しさん [2015/12/26(土) 19:34:37.78 ID:6n5NtJkM.net] >>296 俺は >>201 で示したし、それで十分に満足の行く結果を得た。 >>201 に不満だというのならそれを超えるものをお前が書け。自分でやれ。 他人にやらせるっていうのは俺の常識からは考えられない。
300 名前:デフォルトの名無しさん [2015/12/26(土) 19:35:10.69 ID:6n5NtJkM.net] >>298 お前がやるんだ。お前が言い出したことだろうが。
301 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 19:35:32.98 ID:oIXuKyHb.net] >>295 どうして俺が実装しなきゃならないわけ? 数万倍遅いって言い出した奴が実証のためにコードを提供するのが筋だろ?
302 名前:デフォルトの名無しさん [2015/12/26(土) 19:42:36.24 ID:6n5NtJkM.net] >>301 そんな筋は通らない。実証コードが欲しいといいだしたのは お前なのだからお前が自分で書け。言い出しっぺの法則は プログラマを始め科学的論証に関わる人間すべてに通じる基本原則だ。 どうやればそれを確認できるかという手順も道筋も結論も示した。 自分の満足のいくものが欲しいのなら自分で行動しろ。 他人の足にしがみつくな、気持ち悪い。
303 名前:デフォルトの名無しさん [2015/12/26(土) 19:44:38.98 ID:6n5NtJkM.net] 1万倍の実証コードとか言い出しといて書かないってどういうことよ? 他人に頼りっきりってどういうことよ? 夢があるのなら自分で叶えろよ 親の足かじってんじゃねえぞニート野郎
304 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 19:50:48.20 ID:oIXuKyHb.net] >>302 IDをよく見ろ。俺は実証コードが欲しいだなんて一言も言ってない。
305 名前:デフォルトの名無しさん [2015/12/26(土) 19:51:36.37 ID:EXUTS9i+.net] >>297 何この記法初めて見た もしかして情報界隈では常識なのか?
306 名前:デフォルトの名無しさん [2015/12/26(土) 19:51:49.58 ID:Igcba1qr.net] >>219 親のスネかじってんじゃねーぞニート野郎 とっとと数万倍速いクイックソートの実証しろよ
307 名前:デフォルトの名無しさん [2015/12/26(土) 19:54:34.25 ID:Igcba1qr.net] ID:6n5NtJkMは発狂して「再帰は数万倍遅い」発言をウヤムヤにしたい模様 でも、まだ300レス。先は長いぞ。頑張れ。
308 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 19:56:25.26 ID:oIXuKyHb.net] >>305 俺も見たこと無い。 一瞬、三項演算子にも見えるけど順序がおかしいし。
309 名前:デフォルトの名無しさん [2015/12/26(土) 19:57:11.33 ID:6n5NtJkM.net] >>304 言ったかどうかは問題じゃない! お前はクイックソートで1万倍の差があるのか確認したい、 それを確認する手段としてシェルでクイックソートを実装すればわかる ということを俺は示したんだよ。それだけわかってればいいよもう!
310 名前:デフォルトの名無しさん [2015/12/26(土) 20:00:13.46 ID:6n5NtJkM.net] >>308 ?はただの文字化けだぞ。 数理式計算量証明の理想解近似法を大学で習ってたらわかるだろ。 情報科学の基礎中の基礎だし。
311 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 20:02:01.94 ID:oIXuKyHb.net] >>309 いいや、そもそもそんな事は望んでない。よく読め。 俺が言いたいのは、1万倍もの差が出るなんて事は理論上ありえないって事だ。 それでも尚、実際に1万倍の差が出ると言い張るのであれば それを実証するコードを君が示すべきだよね?
312 名前:デフォルトの名無しさん [2015/12/26(土) 20:03:37.49 ID:EXUTS9i+.net] >>310 すまん、その文字化けしてるところ元は何だったのか教えてくれ O?
313 名前:デフォルトの名無しさん [2015/12/26(土) 20:05:55.80 ID:6n5NtJkM.net] >>311 だから、俺は示したって言ってるだろうが! >>201 でくっきりはっきりと証明してみせただろうが。 それで満足できないというのであれば、満足の行くコードを見たいというのであれば お前がそれを書くべきだ!それが論理的検証というものだ。科学的な姿勢というものだ。 他人の論文に満足できないと言ってるばかりじゃ学会では一切評価されないよ。 それを超える論文を自分で書いてこれでどうだと魅せつけるべきだ。 君はシェルでクイックソートを書くべきなんだ!!
314 名前:デフォルトの名無しさん [2015/12/26(土) 20:06:59.46 ID:6n5NtJkM.net] >>312 掛け算の掛けるだ。 右側では1万倍になってるのがわかっていただけると思う。
315 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 20:09:01.51 ID:YV12MLKo.net] >>281 >>205
316 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 20:09:33.38 ID:YV12MLKo.net] >>285 >>205
317 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 20:13:31.65 ID:oIXuKyHb.net] >>313 いいかい? 君は「示した」と何度もはっきり発言してはいるけど、実のところ何も示しちゃいないんだ。
318 名前:デフォルトの名無しさん [2015/12/26(土) 20:22:57.69 ID:6n5NtJkM.net] >>315 バカかお前は。大脳半球が全損して産まれて来たのか? 名前解決に時間がかかるとするならば、名前解決まで含めて再帰呼出しだ。 外務省はシリアへの渡航を自粛するよう日本国民に通告しているが、そんな不安な情勢の中、 「シリアが危険なんじゃないテロリストが危険なんだ」と言って 意気揚々とシリアに出かけていく頭の中お花畑野郎と同じだろうが。 お前が言ってるのはそれと全く同じこと。 シリアという地域でテロの被害に遭う確率が高いから外務省は渡航を自粛するように 必死に呼びかけているんだ。少しでも日本の国民がテロの被害に遭わないよう骨身を削って 頑張っているんだ。再帰呼出しでプログラム事故に遭う確率が高いから俺は再帰を自粛するよう 呼びかけているんだ。外交官としての俺の立場に立って再考してみろ。お前がどれだけ 愚かなことを言っているか今一度ようく考えてみることだな。
319 名前:デフォルトの名無しさん [2015/12/26(土) 20:24:31.77 ID:EXUTS9i+.net] やべえ記号わかってもなお式の意味わかんねえw
320 名前:デフォルトの名無しさん [2015/12/26(土) 20:25:46.83 ID:Igcba1qr.net] 障害児は シェル関数呼び出しはwhileより130倍遅い と 再帰版のクイックソートは何万倍も遅い が等価らしい 必死で再帰を否定しているバカが低知能であることのエビデンスがまた一つ明らかになってしまった
321 名前:デフォルトの名無しさん [2015/12/26(土) 20:27:35.19 ID:6n5NtJkM.net] >>317 >>201 の画像が見えないのか?俺はエビデンスをしっかりちゃっかりくっきりまるっきり示したぞ。 お前はアイマスク付けて前が見えないと言ってるだけのただのうつけ者。話にならない。
322 名前:デフォルトの名無しさん [2015/12/26(土) 20:30:11.96 ID:EXUTS9i+.net] もしかしてだけどさ、もししてだけどさ、>>201 で示されてることってシェル関数呼び出しがシェルwhileより130倍遅いことだけじゃね?
323 名前:デフォルトの名無しさん [2015/12/26(土) 20:35:37.94 ID:6n5NtJkM.net] >>322 おいおいいい加減にしろよナメクジ野郎。 自らの関数を呼び出すことを再帰と言うのだろうが。 関数の呼び出しが遅い、すなわち再帰の効率がとてもよろしくないということだ。 テロリストが民間人を殺害するのならば、テロがはびこっているシリアには行くべきじゃないということだ。 お前、後藤さんのご家族の前で後藤さんが悪いって言えるのか?後藤さんは悪いよ。 とても危険なところと知りつつシリアに言ったんだから。だけど、それをご家族の前で言う意味がないよね。
324 名前:デフォルトの名無しさん [2015/12/26(土) 20:38:45.39 ID:6n5NtJkM.net] 再帰を使うっていうのはテロリストの前に自らの首を差し出すことと同義。 何があっても文句言うな。そして周囲の人間をその愚行に巻き込むな。 悲しませるな。俺はお前らが再帰を使うと悲しいよ。
325 名前:デフォルトの名無しさん [2015/12/26(土) 21:07:17.88 ID:oIXuKyHb.net] 純粋にシェルスクリプトだけでクイックソートを組むのは骨が折れたぞっと www.fastpic.jp/images.php?file=2429159438.png ループのほうが遅いです本当にどうもありがとうございました
326 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 21:10:42.27 ID:oIXuKyHb.net] コードが見たけりゃどうぞ。 https://ideone.com/b9DfXr
327 名前:デフォルトの名無しさん [2015/12/26(土) 21:21:55.47 ID:6n5NtJkM.net] ____ / \ / ─ ─ \ / (●) (●) \ | (__人__) | \ `⌒´ ,/ / ー‐ \
328 名前:デフォルトの名無しさん [2015/12/26(土) 21:22:21.55 ID:EXUTS9i+.net] なんだやっぱり再帰の方がいいのか
329 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 21:26:26.06 ID:hFLlv/LI.net] ぐうの音も出ないなこれは
330 名前:デフォルトの名無しさん [2015/12/26(土) 21:31:21.64 ID:6n5NtJkM.net] シリアとか言わなきゃよかった 後藤さんのくだりとか意味わかんないし
331 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 21:40:05.38 ID:hFLlv/LI.net] フィボナッチとかはループと再帰で指数倍の差が出るんだっけ?
332 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 22:10:31.84 ID:oIXuKyHb.net] メモ化しないコードだとそうなるね
333 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 22:19:22.17 ID:hFLlv/LI.net] メモ化とか線形のメモリ食うじゃね?
334 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 22:46:18.19 ID:JxygBNoz.net] >>333 直近2つを記憶するだけだから定数
335 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 23:20:10.16 ID:YV12MLKo.net] >>334 それは再帰的定義を使う方では? フィボナッチ数列の第n項を直接nの式で表せるはずだが
336 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 23:36:55.55 ID:JxygBNoz.net] >>335 文脈読もうな。 メモ化に必要な記憶領域が線形ではないか、と言ってる奴がいたから定数だ、と答えただけ。
337 名前:デフォルトの名無しさん mailto:sage [2015/12/26(土) 23:44:58.30 ID:jxcpNE9M.net] まだアーキ依存どころか言語依存の話してるの?
338 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 00:05:08.34 ID:TlhMnrM9.net] 再帰メモ化定数メモリフィボナッチってどんなソースになるの?
339 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 00:35:22.25 ID:nuYFrBF7.net] fibonacci = fib (0,1) fib (m1,m2) 0 = m2 fib (m1,m2) n = fib (m2, m1+m2) (n-1)
340 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 00:38:15.78 ID:nuYFrBF7.net] タプルの代わりに木かハッシュを使えば値を全部保持する 普通のメモ化にできるがフィボナッチの計算にはもちろん不要
341 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 00:54:47.63 ID:Y7IK7QLW.net] >>325 bashを使うのであれば if [ $i -ge $j ]; then の代わりに if (( $i < $j )); then と書ける。 また(( )) の中で単体の変数は$を省略できる if (( i < j )); then 一行で書くこともできる。 (( i >= $ )) && break
342 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 01:09:36.05 ID:Y7IK7QLW.net] stack=("${stack[@]:0:((${#stack[@]}-2))}") これは、こう書ける。 stack=("${stack[@]::${#stack[@]}-2}") ついでに、""をつける方が正しいのではあるが、 値にスペースが無ければ、"" は省略可能。
343 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 01:15:06.76 ID:Y7IK7QLW.net] p=$(( $((${array2[$i]}+${array2[$j]}))/2 )) $((・・・)) の中では普通に () が使用可能 p=$(( (${array2[$i]} + ${array2[$j]}) / 2 ))
344 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 01:21:25.37 ID:Y7IK7QLW.net] for i in `seq 1 1 1000`; do `` は基本的に $() と同等。新しい$()の使用が推奨されている。 for i in $(seq 1 1 1000); do また、これは以下のように書ける for i in {1..1000}; do
345 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 01:32:25.91 ID:Y7IK7QLW.net] lintツールとして、shellcheckコマンドがある。 qsort_rec $left $((i-1)) ^-- SC2086: Double quote to prevent globbing and word splitting. qsort_rec $((j+1)) $right ^-- SC2086: Double quote to prevent globbing and word splitting. $leftと$rightにスペースが入ってる場合に問題になるから""をつけろと警告される。 これは冒頭で left=$(($1)) right=$(($2)) のようにして数値であると保証してあげれば消える。 変数 pair が未使用 その他の警告は、上の指摘を修正すれば消えるはず
346 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 01:46:16.35 ID:Y7IK7QLW.net] ループ版で時間がかかってるのはこの部分な気がするな。 配列をコピーしているわけだし。 stack=(${stack[@]::${#stack[@]}-2}) www.drk7.jp/MT/archives/000995.html さて、ここの非再帰版を見ると、どうも配列のコピーはしてないようだ。 ループ版は高速化の余地がありそうだ。 やってみるかね? うまく実装できるかな?
347 名前:デフォルトの名無しさん [2015/12/27(日) 02:00:40.37 ID:qGJmRem2.net] ループの途中でコマンドを呼び出すようにすればもう少し遅くできるんじゃないかな。
348 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 02:20:49.37 ID:Y7IK7QLW.net] さーて、コードをほとんど読まずに、Perl版をそのまま置き換えてみたが きちんと動かんぞとw 面倒くさいな。 速度的には再帰版より速くなりそうな感じはしてるが、処理間違ってるからなw
349 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 02:32:42.88 ID:Y7IK7QLW.net] あ、できたっぽい? 参考にしたコードに二箇所バグが有るようだな。 > &qsort_array($array2,0,$size); > $right_stack[0] = $right; $sizeが$rightに入るが、正しくは$size-1 > if ($i - $left < $right - i) { ↓ > if ( ($i - $left) < ($right - i) ) { Perlの優先順位は、下のように解釈されるんだっけ? そんなの変えないよな。 今コードを見直してる。
350 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 02:34:29.15 ID:Y7IK7QLW.net] ごめん嘘だったw 。あれぇ〜?
351 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 02:58:09.23 ID:Y7IK7QLW.net] Perl版実行してみたがもともとのコードからして動いてないw
352 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 03:31:06.37 ID:Y7IK7QLW.net] マジめんどくさかったわw 参考にしたコードが悪すぎた。 他のコードと比べてよくわからん比較条件とか処理が多かったので 結局諦めてこっちを参考にした。 gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_102 結論。やっぱりループのほうが速かったねw https://ideone.com/KmmnH7 recursive real 0m0.550s user 0m0.548s sys 0m0.000s loop real 0m0.439s user 0m0.436s sys 0m0.000s なお再帰版も>>326 よりも速くなっているのは、 上で指摘した点をリファクタリングしたため。 >>326 のコード > recursive > real 0m0.637s > user 0m0.636s > sys 0m0.000s > > loop > real 0m0.723s > user 0m0.720s > sys 0m0.000s
353 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 03:35:18.72 ID:Y7IK7QLW.net] ループの方が速かったので訂正よろw 328 名前:デフォルトの名無しさん[] 投稿日:2015/12/26(土) 21:22:21.55 ID:EXUTS9i+ [10/10] なんだやっぱり再帰の方がいいのか 329 名前:デフォルトの名無しさん[sage] 投稿日:2015/12/26(土) 21:26:26.06 ID:hFLlv/LI [1/3] ぐうの音も出ないなこれは
354 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 03:56:54.62 ID:nuYFrBF7.net] 定数の差とかどうでもいい
355 名前:デフォルトの名無しさん [2015/12/27(日) 07:31:06.68 ID:hwv/tSGM.net] >>353 10000倍高速化してから言いなさい
356 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 07:39:49.49 ID:Y7IK7QLW.net] >>355 いいだしっぺどうぞw
357 名前:デフォルトの名無しさん [2015/12/27(日) 07:50:22.72 ID:hwv/tSGM.net] >>356 >>219 の主張を受け継いで高速化したお前が言い出しっぺ
358 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 07:55:16.56 ID:Y7IK7QLW.net] 言い出しっぺの定義を変えるなよw 本当に往生際が悪いw
359 名前:デフォルトの名無しさん [2015/12/27(日) 08:00:41.71 ID:hwv/tSGM.net] >>353 でお前が訂正を求めたレスはID:6n5NtJkMの 「再帰は1万倍遅い」に対するレス。 なので、訂正を求めるには10000倍高速化する必要がある 知能障害児には理解不能かな?
360 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 08:06:42.55 ID:Y7IK7QLW.net] と言われてもなぁw 俺は1万倍速いなんて言ってないし。 ループのほうが速いという証拠も出したからどうでもいいかなw
361 名前:デフォルトの名無しさん [2015/12/27(日) 08:16:44.55 ID:hwv/tSGM.net] じゃ、求めた訂正を取り消しなさい。
362 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 08:18:08.68 ID:Y7IK7QLW.net] >>361 これでいいのかい?w ループの方が速かったよwww 328 名前:デフォルトの名無しさん[] 投稿日:2015/12/26(土) 21:22:21.55 ID:EXUTS9i+ [10/10] なんだやっぱり再帰の方がいいのか 329 名前:デフォルトの名無しさん[sage] 投稿日:2015/12/26(土) 21:26:26.06 ID:hFLlv/LI [1/3] ぐうの音も出ないなこれは
363 名前:デフォルトの名無しさん [2015/12/27(日) 09:08:43.20 ID:hwv/tSGM.net] 少し速いと10000倍速いの区別がつかないおバカさんとうエビデンス(笑)
364 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 09:33:20.24 ID:Zmrinoji.net] 分かったことは ・再帰をただ単にループに直すと却って遅くなる ・最適化を施せばループのほうが速くなるが、10000倍速くなるなんてことはない の2点でおっけい?
365 名前:デフォルトの名無しさん [2015/12/27(日) 09:55:25.37 ID:TQTcd7lL.net] そうだな。シリアがどうとか言い始めるほどループの方が優秀な訳では無さそうだな
366 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 10:12:22.58 ID:dpCOQ+Jx.net] ∞倍だね。 再帰なんってのと比較すること自体おかしい。 却って遅くなるなんて書いてる恥知らずは、プログラミング技術が無さ過ぎ。
367 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 10:24:13.63 ID:Zmrinoji.net] >>366 昨日から昨晩に掛けてのやり取りを知らないのか? 俺はそのやり取りから、>>364 が分かった事の全てであるって発言しただけなんだけど。
368 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 10:36:38.52 ID:dpCOQ+Jx.net] やり取りからだって? 2chの妄想だけじゃなくて現実を見ろよ。
369 名前:デフォルトの名無しさん [2015/12/27(日) 10:40:01.29 ID:hwv/tSGM.net] ∞倍 wwwww 無限大を憶えたての小学生かよ quick sort 再帰/quick sort 非再帰 = ∞, すなわちquick sort 非再帰が0って事だな。 再帰を必死に否定しているバカの主張 1 スタックが制限の厳しいリソースである環境が全てだと思い込み、再帰の致命的なペナルティだと主張する 2 シェル関数呼び出しをエビデンスとして、再帰が130倍遅いと主張する 3 再帰版のqsortは数万倍遅いと主張するが、数万倍速いはずの非再帰版を示さない 4 知能が低く再帰を理解できない。それをもって再帰は難解と主張する。 5 非再帰版qsortの実行時間はゼロ 本当に知能が低い
370 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 11:19:02.84 ID:BwztOoZh.net] >>364 最適化なくてもループのが速いでしょ 10000倍は無いがw
371 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 11:22:49.99 ID:Zmrinoji.net] >>368 お前の中ではそうなんだろうな。そんな事より現実を見ろよ。 大本の彼らの主張は「クイックソートをお題にした場合に於いて再帰はループに比べて何万倍も差がでる(>>219 )」 俺らの主張は「そんなに差がでることは理論的にありえない(>>286 )」 であって、 ループのほうが再帰より「僅かでも」速いかどうか(>>352-353 )なんざ元々議論していない。 クイックソートをやる上で比較にならないほど再帰のほうが遅くなるというならソースを出せや
372 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 11:23:28.75 ID:yWds0j/q.net] 繰り返しの方が再帰より速い! (ただしシェルスクリプトに限る)
373 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 11:23:33.41 ID:Zmrinoji.net] >>370 >>325
374 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 11:29:16.92 ID:nlFV9EHx.net] >>371 引数受け渡しとかレジスタ待避とかで、余分なメモリー操作が発生する。
375 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 11:32:56.76 ID:Zmrinoji.net] >>374 >>260 定数オーダーの空間計算量で計算が出来ないなら、原理的に余分なメモリ操作は避けられない。 それはループでも一緒。
376 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 11:43:09.26 ID:yWds0j/q.net] >>374 明示的なスタック操作と大差ないのでは?
377 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 11:52:39.31 ID:BwztOoZh.net] >>373 純粋に処理速度の話してんならネイティヴコード化したものでないとさ
378 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 12:07:38.28 ID:BwztOoZh.net] >>375 横ですが、再帰呼出だとcallのオーバーがある分遅くなるで良いのかな? まあ数パーセント程度だと思うけど
379 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 12:20:57.14 ID:nuYFrBF7.net] クイックソートだからなんとかなってるだけで たとえば赤黒木の操作を自前でスタック管理するアホはいないわけ
380 名前:デフォルトの名無しさん [2015/12/27(日) 12:27:15.41 ID:Zmrinoji.net] >>377 ほい、最適化しなければループのほうが遅い証拠。 www.fastpic.jp/images.php?file=8506909875.png
381 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 12:33:24.41 ID:BwztOoZh.net] >>380 ああ分かってない人ねwww
382 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 12:35:34.85 ID:Zmrinoji.net] >>378 Pen4のデータシートの値を元にするなら ループのコストと再帰のコストは約2.5〜3clockくらいの差になると思う。 今時のCPUならもっと差は縮まるだろうし、実際に測った訳じゃないけど だいたいそのくらいになる筈。
383 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 12:38:44.94 ID:Zmrinoji.net] >>381 最適化が無くてもループの方が「僅かでも」速いって言い張るお前に そうじゃない場合もあるって言ったのが>>373 で、それに対しお前はネイティブコードで比較しろっつーから 「最適化無しのネイティブコードで」比較したんだが。 一体お前は何を求めてるんだ?
384 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 12:38:57.92 ID:BwztOoZh.net] >>382 そこまで解説できる人ならネイティヴコードだと逆転するのわかるでしょ アセンブリで書けとは言わんけどさ >>381 はすまん
385 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 12:42:13.97 ID:Zmrinoji.net] >>384 ループ以外の本質的な処理に100clock掛かるとすれば、 数%の差だけどループより再帰のが遅くなるって意見は正しいねって話さね 381については了解
386 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 12:46:31.99 ID:BwztOoZh.net] >>385 thx
387 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 13:08:45.42 ID:yWds0j/q.net] >>378 tail callを繰り返しに変換できるようなケースだと 関数呼び出しはコスト高かも知れないが、 ループ版では明示的スタック操作をしなければならない場合、 call,ret相当のことをjpと組み合わせて明示的にやらないといけない。 通常、関数呼び出し後のスタックフレームの確保はcalleeが明示的にやるからループ版と変わらないが、 スタックフレームの開放はretが自動的にやる。 だからコスト的には大差なく、 関数呼び出しの方が有利なケースだってあるはず。 繰り返しの明示的なスタック操作が圧倒的有利にあるのは、 FILOじゃなくてFIFOにしたり戦略が建てられること。
388 名前:デフォルトの名無しさん [2015/12/27(日) 13:36:27.64 ID:9aquywWv.net] >>379 お前は何を言っているんだ。 FreeBSDもLinuxも.NETもJavaも赤黒木はループで実装してるぞ。 再帰はプログラムの中に時限爆弾仕込むようなもの。再帰使うやつはテロリスト。
389 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 13:46:00.90 ID:nuYFrBF7.net] 頑張ってバグ入れずに済んでよかったね、としか。 しかもそれで得られる速度の向上も微々たるもの。
390 名前:デフォルトの名無しさん [2015/12/27(日) 14:00:50.68 ID:9aquywWv.net] >>389 再帰にしたらバグが減るってものでもないしなあ。 不変オブジェクトを使うから再帰がやりやすいのであって 可変オブジェクトでの再帰はループよりもややこしいところがあるよ。
391 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 14:27:20.76 ID:+491JRRx.net] >>388 >赤黒木はループで実装してる 本当か?やればできるものなのか?証拠をみせてみろ 平衡ニ分木であるからスタックもむやみに深くならないし, 正直なところ,可能だとしてループ化するメリットがあるのかね
392 名前:デフォルトの名無しさん [2015/12/27(日) 14:37:53.35 ID:9aquywWv.net] >>391 freebsd red black tree source とかで検索すれば出てくるよ
393 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 14:44:37.25 ID:BwztOoZh.net] >>390 バグ云々ではなくて、コード数や可読性だと思うが そもそも再帰呼出を理解出来ない人は論外だが
394 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 14:47:35.86 ID:kNkpHWWg.net] 知らないうちにコードが再帰化してハマりました のほうが多そう
395 名前:デフォルトの名無しさん [2015/12/27(日) 15:00:09.33 ID:9aquywWv.net] >>393 主語がわからん
396 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 15:03:49.95 ID:BwztOoZh.net] >>395 バグが増える要因はプログラミングソースのステップ数や可読性に左右されるのであって、アルゴリズムは特に関係ないということ
397 名前:デフォルトの名無しさん [2015/12/27(日) 15:06:51.61 ID:9aquywWv.net] >>396 アルゴリズムによってステップ数や可読性は変わるよ
398 名前:デフォルトの名無しさん [2015/12/27(日) 16:29:32.45 ID:hwv/tSGM.net] >>388 LinuxもFreeBSDも木全体に対して何らかの操作を行うインターフェースを実装してないからあたりまえ。 どっかで見たことある気がしたので探してみたらunbound code.metager.de/source/xref/freebsd/contrib/unbound/util/rbtree.c また一つ、再帰否定バカが無知のエビデンス(笑)を積み重ねていく
399 名前:デフォルトの名無しさん [2015/12/27(日) 16:32:53.51 ID:9aquywWv.net] >>398 知らない人がいたから言っただけだよ。 ループで実装されてるんだよーって。 インターフェースを実装してないからとか理屈付けする意味あるのかな。 バカはお前。
400 名前:デフォルトの名無しさん [2015/12/27(日) 16:47:04.16 ID:9aquywWv.net] インターフェース? 再帰と関係あるのかな? わからん。この世はわからんことだらけだ。
401 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:00:20.74 ID:GUkoCLfr.net] > LinuxもFreeBSDも木全体に対して何らかの操作を行うインターフェースを実装してない ? OSが…インタフェースを…実装?
402 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:01:14.29 ID:Zmrinoji.net] >>399 ねぇねぇ そのループで実装されてる>>398 のコードでも 自前でスタック管理してる訳じゃ無い。 とすると、>>379 に対する突っ込みとしては>>388 変じゃない?
403 名前:デフォルトの名無しさん [2015/12/27(日) 17:03:04.29 ID:9aquywWv.net] >>402 スタック管理の解釈次第だね。>>388 が変だと結論できる解釈もありだね。
404 名前:デフォルトの名無しさん [2015/12/27(日) 17:03:49.11 ID:9aquywWv.net] >>401 わけわからんよね。
405 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:04:55.68 ID:Zmrinoji.net] >>403 ほう、つまり君はただのループをスタック管理と解釈する訳だね?
406 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:05:12.17 ID:X/TfzIFq.net] 最近、書き込みが多くなって このスレの勢いがすごい
407 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:07:35.61 ID:Zmrinoji.net] >>406 確かに。 >>256 から数えて、1日半で150も伸びてる。
408 名前:デフォルトの名無しさん [2015/12/27(日) 17:18:58.89 ID:9aquywWv.net] >>405 再帰をループに置き換えるときには 再帰で暗黙的に管理されるスタック上の情報を 明示的に管理する必要がある。それをやるのは面倒だから 赤黒木は再帰で実装されているはずだというのが>>379 に関する俺の解釈。 面倒なことないよ、現に赤黒木はループで実装されることが多いよっていうのが>>388
409 名前:デフォルトの名無しさん [2015/12/27(日) 17:21:03.25 ID:9aquywWv.net] 語句の解釈に文句つけるのはあまり建設的じゃないような・・・。 その先には何もないような・・・。
410 名前:デフォルトの名無しさん [2015/12/27(日) 17:24:39.80 ID:9aquywWv.net] クイックソートについても再帰のスタックをそのまま ループで再現するっていうのはどうかと思うなあ。 末尾再帰は単純なループに変換できる。ループで書くならループらしい書き方をするべき。
411 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:26:57.17 ID:Zmrinoji.net] >>408 ふーむ。 複雑な再帰構造を持つ場合、例えば再帰下降構文解析器みたいに複雑な相互再帰をする場合には クイックソートの時のように簡単に再帰をループで置き換えることは出来ない。 そして一般に再帰をループで置き換えるならスタックが必要で、 込み入った再帰をスタックを使ってでもループに置き換える奴は居ないだろう。 現に赤黒木をスタック管理をしてでも強引にループで書き直すようなアホは居ないんじゃないの? というのが>>379 に関するこっちの解釈。 それに対し、いやいや赤黒木はループで実装してるんだぜ!ってのが>>388 の俺の解釈。 話が噛み合って無くね?ってのが>>402 日本語の問題な気も
412 名前:デフォルトの名無しさん [2015/12/27(日) 17:28:09.10 ID:9aquywWv.net] >>411 解釈が違うのなら話が噛み合わないことについては筋が通るかと。
413 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:29:32.88 ID:Zmrinoji.net] >>410 そもそもクイックソートは分割統治法の典型例だからなぁ。 自分を2度呼び出す時点で末尾再帰的じゃないし ループらしい書き方をするとクイックソートとは呼べないシロモノになると思う
414 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:30:37.18 ID:Zmrinoji.net] あ、勿論クイックソートをもっと単純なループで書き直せるってんなら歓迎するよ!
415 名前:デフォルトの名無しさん [2015/12/27(日) 17:33:05.31 ID:9aquywWv.net] >>413 一方の再帰呼び出しは末尾再帰になるっしょ。ループに置換できる。
416 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:33:09.23 ID:Zmrinoji.net] >>412 複数の解釈の仕方がありうるなら、 オレオレ解釈を元に相手をこき下ろす前にやることがあるだろうと
417 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:34:13.75 ID:Zmrinoji.net] >>415 ・・・・・・それは依然として再帰関数と呼ぶのでは?
418 名前:デフォルトの名無しさん [2015/12/27(日) 17:37:56.44 ID:9aquywWv.net] >>416 僕とー君とーは解釈が違うよねってことだよ。 こき下ろすべきじゃないと思うのは君の勝手ー。 こき下ろすのも僕の勝手ー。 ヒューマニズム振りかざす人大嫌いー。←これ僕
419 名前:デフォルトの名無しさん [2015/12/27(日) 17:39:20.40 ID:9aquywWv.net] >>417 ループを書く場合、一方の再帰呼び出しは末尾再帰だから 単純なループに置き換えられるよねってことだから、もはや再帰関数とは呼ばないよ。
420 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:42:10.80 ID:Zmrinoji.net] >>418 いや、君が>>403 で言ったのは「スタック管理」の解釈の違いだろ? 「赤黒木が再帰で書かれてる」等とは一言も言ってない>>379 を読んだ君が>>408 みたいな解釈をして、 人のことをテロリスト呼ばわりするのってどうなの?
421 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:43:59.16 ID:Zmrinoji.net] >>419 https://ja.wikipedia.org/wiki/%E5%86%8D%E5%B8%B0 「再帰とは、あるものについて記述する際に、記述しているものそれ自身への参照が、その記述中にあらわれることをいう。」 ループを含む関数は再帰関数にはなれないの? そんなことはないと思うんだけど。
422 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:46:46.63 ID:YWwZOVBb.net] 末尾再帰を勘違いしている人がいるので説明しておこう。 末尾再帰は「再帰を末尾再帰で書けば速くなる」というものではなくて (単純な)ループを何らかの理由で再帰の形にしないといけない時、 末尾再帰の条件を満たすように、ループを再帰に変換すると コンパイラが再帰をループに逆変換してくれる機能 なので、再帰を全て末尾再帰にできるわけではなく (末尾再帰にできるのは、元が単純なループの場合のみ) また、ループ ─(人間)→ 再帰 ─(コンパイラ) → ループ というふうに、ループに戻しているだけなのでループより速くなることはない。
423 名前:デフォルトの名無しさん [2015/12/27(日) 17:47:27.00 ID:hwv/tSGM.net] >>401 ,404 FreeBSDのrbtreeもLinuxのrbtreeもそういうインターフェースを実装していないって事だよ。
424 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:54:40.33 ID:Zmrinoji.net] >>422 より正確には、「再帰全てをノーコストで末尾再帰にできるわけではなく」かな。 関数がファーストクラスならCPSに変換すれば末尾再帰の形にはなる。 ・・・・・・ヒープガリゴリ使うし、スタックを自前で持つのと変わらんけど。
425 名前:デフォルトの名無しさん [2015/12/27(日) 17:56:45.58 ID:9aquywWv.net] >>420 >>379 は「赤黒木が再帰で書かれてる」とは一言も言ってないけれども、 「赤黒木の操作を自前でスタック管理するアホはいない」と言っているのだから 赤黒木の操作は、自前でスタック管理しないやり方、つまり再帰で実装される と思っているという解釈は妥当だと思ってる。悪いけど、この解釈については譲歩するつもりはないよ。 120%君が間違っているし、再帰を使う人は120%テロリスト。それでいいね?
426 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 17:58:29.79 ID:YWwZOVBb.net] >>424 速くするための末尾再帰なのに、 逆に遅くなったら本末転倒だよなw
427 名前:デフォルトの名無しさん [2015/12/27(日) 18:00:45.81 ID:9aquywWv.net] >>421 無理。再帰を使うなら全部再帰で書くべき。 ループを使う処理では再帰を書かない。 再帰を使う処理ではループを書かない。 それで初めてループと再帰の決着がつけられる。 そしてループが勝利する。
428 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 18:01:48.21 ID:Zmrinoji.net] >>425 確率が1を超えてるとか、幼稚園に迷い込んだ気分だよ。 「赤黒木の操作を自前でスタック管理するアホはいない」と言っている以上、 赤黒木の操作は、スタックなんてものをそもそも自分で触らないようなやり方、 つまり再帰か、又は上手なループで実装されているって話だろ? フィボナッチ数を計算する関数をスタックを使わずに書いたって言った時、君は再帰の方しか思い浮かべられないのかい? もしかして自閉症患者かい?
429 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 18:04:52.45 ID:Zmrinoji.net] >>427 それじゃぁ各ノードに可変個の子要素を持つ多分木を列挙するコードは どうやって書くつもり? for (auto it : children) { if (it->is_leaf()) { printf("%d ", it->value); } else { it->print_values(); } }
430 名前:デフォルトの名無しさん [2015/12/27(日) 18:11:29.94 ID:9aquywWv.net] >>428 >>389 を見るに、そうじゃないと思うんだがなあ。 俺は自閉症患者だけれども、それとこれとは関係ない。 お前は全国の自閉症患者やそのご家族の方に謝罪するべき。 あとテロリストにも。
431 名前:デフォルトの名無しさん [2015/12/27(日) 18:15:49.41 ID:9aquywWv.net] >>429 どうやってって何がだよ? ループでか?再帰でか?
432 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 18:18:05.73 ID:Zmrinoji.net] >>430 日本語って難しいよね。分かる分かる。 >>389 の解釈は、 再帰でも書けるところをループで書いたんだ。へぇ。バグってなくて良かったね。ご苦労さん。 じゃないの? >>379 が再帰を仮定しているかどうかとは別問題。 俺も自閉症患者だけどね。自分に謝るのって変な感じがするよ。
433 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 18:18:46.64 ID:Zmrinoji.net] >>431 どっちでも良いけど、どっちかしか「使ってはならない」というローカルルールの元ではどう書くの?
434 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 18:47:59.48 ID:Zmrinoji.net] >>431 まだ出来ないの? >>429 に7行で書いたような、こんなコードが走ります的な切れ端で十分伝わるんだよ?
435 名前:デフォルトの名無しさん [2015/12/27(日) 18:53:56.10 ID:9aquywWv.net] >>432 スタックで管理の解釈の違いだな。やっぱり噛み合わない。
436 名前:デフォルトの名無しさん [2015/12/27(日) 18:57:04.25 ID:9aquywWv.net] >>434 あのさ、同意も取らずに強引に物事を進めようとするのってどうかと思うよ。 北風と太陽って話くらい知ってるでしょ?コンセンサスってとても大事。 お前コンセントしか知らないだろ。扇風機の線をぶち込んどけば何とかなるものと しか思ってないだろ。それじゃないからな。 まずは、どういう理由で書いてほしいのかっていうところと それによって何が成し遂げられるのかっていうところとどうして自分で やらないのかって言うところを説明して、心からお願いしないと俺の不動の心は動かないよ。
437 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 19:08:44.13 ID:Zmrinoji.net] >>435 残念。 >>436 ループを含む関数が再帰関数になれないのであれば、 >>429 のような書き方は認めないって事だよね? 君ならどう書くの?って聞いただけなのになんでそんな反応になるのかね?
438 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 19:10:20.46 ID:/NTMuKoN.net] 横道にそれ過ぎずに、それぞれの論旨を書いてみろよ。 中傷合戦ひどくてわからん。
439 名前:デフォルトの名無しさん [2015/12/27(日) 19:12:29.31 ID:9aquywWv.net] >>437 ループと再帰の優劣をつける場合、ループはループだけで 再帰は再帰だけで実装するべきだよねって話をしただけだよ。 お話の前提をすり替えてあたかもお話が続いているように するのはよろしくないと思うんだよな。
440 名前:デフォルトの名無しさん [2015/12/27(日) 19:13:53.77 ID:9aquywWv.net] >>438 俺は畑を耕していただけなんだ。そしたら ID:Zmrinoji こいつが 機関銃もって脅してきたんだ。おらはイモが食いたいだけだ。再帰使うやつはテロリストだ。 恐ろしいことだ。
441 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 19:14:42.52 ID:Zmrinoji.net] >>438 大本の論旨としては、人のことをテロリスト呼ばわりするのってどうなん?って事なんだけど。 ループと再帰の優劣をつけるなんてどこから出てきた?
442 名前:デフォルトの名無しさん [2015/12/27(日) 19:19:02.12 ID:9aquywWv.net] >>441 テロリストと呼ばれるのが嫌ならテロ行為やらなければいいだろ。 クイックソートでやってただろ。ループがいいか、再帰がいいかって。それのこと。 知らなかったの?じゃあ知って。今知って。
443 名前:デフォルトの名無しさん [2015/12/27(日) 19:19:34.89 ID:Rer1VVak.net] バッファオーバーフロー攻撃を成功させるためには、再帰が最も都合よい。
444 名前:デフォルトの名無しさん [2015/12/27(日) 19:26:07.61 ID:Rer1VVak.net] 攻撃されるのと攻撃するのと、どちらが良いか? 当然、攻撃する方が良い。 つまりテロリストは勝ち組なのである。 当該スレにおいて再帰を推奨している人は勝ち組である。 なぜなら危険物を推奨するのは攻撃側だからである。
445 名前:デフォルトの名無しさん [2015/12/27(日) 19:30:06.01 ID:9aquywWv.net] >>443 そういうことだな。昨今、関数型言語の流行に伴って再帰がすぐれたものであると 思い込んだニワカのペーペーどもがろくな知識も持たずに危険なコードを 書きまくって悦に入ってる姿を見ると暗い気持ちになる。再帰というのは ループに大敗北した歴史を持つものだっていうのを知って欲しい。 for whileというのは再帰の進化形。メガ進化。
446 名前:デフォルトの名無しさん [2015/12/27(日) 19:33:08.96 ID:Rer1VVak.net] お前ら逮捕されても知らんぞ。 公共の場所で再帰を勧めたりしてたら、そのうち警察が事情を聴きに来るぞ。
447 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 19:40:05.96 ID:Zmrinoji.net] どうでも良いけど、再帰がテロ行為になるなんて初耳だなぁ # 今日の夕飯はすき焼きでした
448 名前:デフォルトの名無しさん [2015/12/27(日) 19:43:06.97 ID:Rer1VVak.net] >>447 自動車の256バイトしかないRAMで再帰したら、バシバシ轢き殺すぞ。 そこまでやってこそ本物のテロリストだろ。
449 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 19:49:26.35 ID:Zmrinoji.net] >>448 誰がそこまで特殊でオンボロな例を挙げろと ちなみにテロリストの定義はテロリズムを奉ずる人で、 テロリズムの定義は https://ja.wikipedia.org/wiki/%E3%83%86%E3%83%AD%E3%83%AA%E3%82%BA%E3%83%A0#.E5.9B.BD.E9.9A.9B.E9.80.A3.E5.90.88 「住民を威嚇する、または政府や国際組織を強制する、あるいは行動を自制させる目的で、 市民や非戦闘員に対して殺害または重大な身体的危害を引き起こす事を意図したあらゆる行動」 だそうですよ。 あと自動車の場合、バシバシ轢き殺すなんて事態にはならず、単にエンストするだけだと思うの。 フェイルセーフって知ってるよね?
450 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 19:55:14.65 ID:Zmrinoji.net] >>440 > 俺は畑を耕していただけなんだ。そしたら ID:Zmrinoji こいつが > 機関銃もって脅してきたんだ。おらはイモが食いたいだけだ。再帰使うやつはテロリストだ。 俺の知ってる事実と違うね。 俺は今日は364から話を始めた。そこにID:9aquywWvが388から割り込んできて、 人のことをやれテロリストだやれ機関銃をもって脅してきただ喚いてるの。
451 名前:デフォルトの名無しさん [2015/12/27(日) 20:01:43.77 ID:Rer1VVak.net] >>450 テロリストは自分のことをテロリストだと思っていないんだよな。 聖戦士だと思ってる。 正義のために再帰を仕込むんだよな。 まあでも、国民側から見ればテロリストなんだけどな。
452 名前:デフォルトの名無しさん [2015/12/27(日) 20:02:57.65 ID:Rer1VVak.net] 再帰なんてある意味爆弾みたいなものだしな。 テロリストが使う新型爆弾なんじゃねーかな。
453 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 20:07:24.21 ID:Zmrinoji.net] そうやって正義の為にループを仕込むんだね? よく分かったよ! ちなみにバッファオーバーフローの攻撃手法としては再帰は下の下だからな。 getsなんかを使った方がよっぽど手っ取り早い上に任意コード実行まで出来る。
454 名前:デフォルトの名無しさん [2015/12/27(日) 20:08:29.75 ID:9aquywWv.net] >>450 聞かれたから答えてたけど、>>388 は君に対するレスじゃないよ。
455 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 20:10:16.23 ID:Zmrinoji.net] >>454 知ってるよ? でも再帰使うやつはテロリスト発言で敵を増やしてないかい?
456 名前:デフォルトの名無しさん [2015/12/27(日) 20:12:06.44 ID:9aquywWv.net] >>455 割り込んでないよね。テロリストと糾弾されて君が勝手にファビョッただけだよね。 僕は畑耕してただけ。
457 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 20:15:26.35 ID:Zmrinoji.net] >>456 文脈をよく読もう。 364から始まる再帰とループに関する話に混ざった379に君が割り込んでるね?
458 名前:デフォルトの名無しさん [2015/12/27(日) 20:17:05.55 ID:Rer1VVak.net] >>457 アッラーアクバル。
459 名前:デフォルトの名無しさん [2015/12/27(日) 20:17:12.93 ID:TQTcd7lL.net] テロリスト(笑) アホかな?
460 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 20:17:29.15 ID:TlhMnrM9.net] お前らなんでそんな盛り上がってんだ?
461 名前:デフォルトの名無しさん [2015/12/27(日) 20:17:55.10 ID:9aquywWv.net] >>457 割り込んでないね。僕は>>379 に話しかけただけだね。 君が>>379 とお話したかったのなら>>379 に話しかけるべきだね。
462 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 20:18:53.79 ID:Zmrinoji.net] >>458 そうだね、偉大だね。 スプンタ・マンユに祈りを!(宗教ちげぇ)
463 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 20:25:14.94 ID:Zmrinoji.net] >>460 いわゆる暇人という奴では。 >>461 木構造って知ってる? あと、俺はそのレス(>>379 )にその返し(>>388 )って変じゃね?って言っただけで、 それに対して君が「スタックの管理とは」なんて話を始めるから(>>403 ) そのコード(>>398 )の何処にスタックなんて使われてるんですか―って訊いて(>>405 ) それに対してまだ答えが返ってきてないんだけど。 君はあれかな、都合の悪い質問は見なかったことにする人なのかな。
464 名前:デフォルトの名無しさん [2015/12/27(日) 20:29:09.10 ID:9aquywWv.net] >>463 なんで僕にレスしてくるの? 自分が話したいことがあるならそれを話せばいいじゃん。 僕は僕で自分の話したい話を話したい人とするから。 たまたま>>379 だったってだけで君が>>379 と話したいなら 僕はそれを否定しないよ。割り込まれたとも思わない。 ほら話しかけろよ。>>379 も絶対お前のこと好きだって。 言っちゃえよ。好きだって言っちゃえよ!
465 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 20:29:57.74 ID:Zmrinoji.net] >>464 暇潰しに最適なので大好きです
466 名前:デフォルトの名無しさん [2015/12/27(日) 20:31:26.39 ID:9aquywWv.net] >>465 僕もだよ
467 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 20:32:45.93 ID:Zmrinoji.net] >>466 それで、人のことをテロリスト呼ばわりするのってどうなん?
468 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 20:33:29.47 ID:5UZSmdOE.net] ID:Zmrinoji必死だなw
469 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 20:34:10.68 ID:Zmrinoji.net] >>469 必死乙
470 名前:デフォルトの名無しさん [2015/12/27(日) 20:36:11.58 ID:9aquywWv.net] >>467 違うんだ、待ってくれ、君のことをテロリストと言ったんじゃない。 再帰を使う人はテロリストなんだ。君じゃない。
471 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 20:37:37.99 ID:Zmrinoji.net] >>470 つまり、>>469 で示したように再帰を使う俺はどっち?
472 名前:デフォルトの名無しさん [2015/12/27(日) 20:39:37.16 ID:9aquywWv.net] >>471 では準構成員ということでここはひとつ
473 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 20:40:19.12 ID:Zmrinoji.net] >>472 笑ったから良いやww
474 名前:デフォルトの名無しさん mailto:sage [2015/12/27(日) 23:12:05.90 ID:P4P/t2xP.net] お前ら仲良いな
475 名前:デフォルトの名無しさん mailto:sage [2015/12/28(月) 00:41:11.60 ID:cpjqbiy5.net] やっぱり再帰無しでループによるプログラミングが最高だね!
476 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/28(月) 02:41:10.02 ID:/Vjc/SbZ.net] しね
477 名前:デフォルトの名無しさん mailto:sage [2015/12/28(月) 07:13:10.09 ID:N+qRD9W4.net] uy 品が無さすぎ。
478 名前:デフォルトの名無しさん mailto:sage [2015/12/28(月) 08:54:56.95 ID:i05gjBFH.net] >>476 >>476
479 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/28(月) 14:13:49.28 ID:FI1ndW8l.net] 私生活において自分ほど品性の高い奴はそうそういないよ 何をしていてもカリスマ性があふれ出してしまう
480 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/28(月) 14:17:04.49 ID:FI1ndW8l.net] 「しね」というのは、実は奥の深い言葉なんだけど知っていましたか? プログラム中でいえばNULLと似ている 人はなぜ生きるのか、なぜ死なないのか、 その真理を見つける事は誰も出来ていない よって「死」とは恐怖かもしれないし、救いかもしれない つまり正解でも不正解でも無い それゆえに「しね」という言葉を発しても、敵と味方は最終的に五分にしかならない意味のない言葉なんです だから頻繁に使っていくと良いよ
481 名前:デフォルトの名無しさん mailto:sage [2015/12/28(月) 14:30:10.73 ID:i05gjBFH.net] アスペが語りだしたと聞いて
482 名前:デフォルトの名無しさん [2015/12/28(月) 14:59:07.57 ID:kIejf3VS.net] >>480 しね
483 名前:デフォルトの名無しさん mailto:sage [2015/12/28(月) 17:06:38.81 ID:6k5OwRcO.net] 再帰じゃないと書いてらんない関数があるのも事実
484 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 05:12:44.62 ID:GnldGbIR.net] >>419 アホはしね
485 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 05:14:17.23 ID:GnldGbIR.net] >>422 tail callも知らんのかよw
486 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 05:16:02.68 ID:GnldGbIR.net] >>423 インターフェースとか抽象データ型ってことを理解できてないから、 そう言っただけでは理解できないんだと思うよ。
487 名前:デフォルトの名無しさん [2015/12/29(火) 16:41:59.31 ID:+ubDtqOv.net] >>429 でけたやでー https://ideone.com/hykdXg
488 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 20:37:04.28 ID:mZCjkrMY.net] >>485 お前のほうが分かっていないような気がするが‥
489 名前:デフォルトの名無しさん mailto:sage [2015/12/29(火) 22:38:58.43 ID:tgd/4Yaw.net] >>422 の「なので、再帰を全て末尾再帰にできるわけではなく」とか恥ずかしいよなw
490 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 07:30:40.60 ID:hgJXqSbV.net] >>489 >422 「再帰を全て末尾再帰にできるわけではな」いのは当然だが,どうしてはずかしいんだ?
491 名前:デフォルトの名無しさん [2015/12/30(水) 16:36:10.59 ID:GbTfiPvb.net] > コンパイラが再帰をループに逆変換してくれる機能 恥ずかしい発言はこれだね。
492 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 17:06:15.23 ID:JfqdTNxj.net] >>491 その理由を言わないとw
493 名前:デフォルトの名無しさん [2015/12/30(水) 17:07:27.17 ID:WCUOMmTt.net] 掲示板ではレベルのミスマッチがよくあるんだよな。 たとえば、アセンブリと機械語は一対一で対応していると純粋に信じてる人は世の中に結構多い。 そういう人たちとプロセッサのデザイナが掲示板で議論すると当然ミスマッチが起こる。 こういう場合、当然勢力の面でデザイナの方が分が悪くなるね。 世の中、知ったかぶりのバカの方が多いから。
494 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 17:08:24.47 ID:JfqdTNxj.net] 手動で末尾最適化をしてみればいいんだよ。 そうすれば、なるほど、 これが最適化されたコードなんだな!って ループになったコードを目の当たりにすることになる。
495 名前:uy ◆Qawu9.2l1E mailto:sage [2015/12/30(水) 17:28:38.17 ID:hD2EQx+W.net] そういう周りくどい事やってるうちは三流 uyの領域に到達すると文章読むだけで理解する
496 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 17:39:40.10 ID:hgJXqSbV.net] >>491 コンパイラが再帰をループにしてくれる機能はあるよ,恥ずかしいのはどちら?
497 名前:デフォルトの名無しさん [2015/12/30(水) 18:05:13.50 ID:WCUOMmTt.net] 再帰の方が有利なら、わざわざループに変換するなよ。 むしろ、ループを自動的に再帰に変換しろよ。
498 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 18:08:15.81 ID:Y9esFwyM.net] >>492 逆変換が意味不明 単に変換なら同意するけど
499 名前:デフォルトの名無しさん [2015/12/30(水) 18:35:57.34 ID:WCUOMmTt.net] テロリストは逮捕されろよ。
500 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 18:45:12.16 ID:o3pJDHAa.net] 再帰が実用的でなく ループの方が有利だから 変換しないといけない。
501 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 18:47:59.10 ID:hgJXqSbV.net] >>498 それは文脈による,よく逆電圧っていうが実は順電圧だったりすることはあるし
502 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 19:10:36.15 ID:Y9esFwyM.net] >>501 > それは文脈による, だからこの文脈だと意味不明って言ってるんだが > よく逆電圧っていうが実は順電圧だったりすることはあるし ますます意味不明
503 名前:デフォルトの名無しさん [2015/12/30(水) 19:20:03.93 ID:pyiqU+eC.net] >>502 この分からず屋!!
504 名前:デフォルトの名無しさん mailto:sage [2015/12/30(水) 21:43:44.03 ID:c5JPL3VW.net] 分かるように説明できないんじゃ周りは皆分からず屋に見えてしまうね
505 名前:デフォルトの名無しさん [2015/12/30(水) 21:56:06.02 ID:WCUOMmTt.net] 我々市民はテロリストを納得させるような言葉を持たない。 従って、テロリスト自ら変わらない限り、テロリストは永遠に市民の敵である。
506 名前:デフォルトの名無しさん [2015/12/31(木) 01:15:35.98 ID:+JFM0ZYm.net] >>496 キミの方だとおもうよ。ぷぷぷ。 「末尾再帰は... コンパイラが再帰をループに変換してくれる機能」 > 末尾再帰は「再帰を末尾再帰で書けば速くなる」というものではなくて > (単純な)ループを何らかの理由で再帰の形にしないといけない時、 > 末尾再帰の条件を満たすように、ループを再帰に変換すると > コンパイラが再帰をループに逆変換してくれる機能
507 名前:デフォルトの名無しさん [2015/12/31(木) 01:18:23.37 ID:+JFM0ZYm.net] >>496 それは、「末尾再帰最適化」というコンパイラの機能だね。
508 名前:デフォルトの名無しさん [2015/12/31(木) 01:21:18.07 ID:+JFM0ZYm.net] 「ループを再帰に変換すると、コンパイラが再帰をループに逆変換してくれる」 頭沸いてるだろ。ぷぷぷ。最初からループで書いとけよ。
509 名前:デフォルトの名無しさん [2015/12/31(木) 02:10:00.81 ID:RPyreEna.net] そんなんじゃ小説なんか読めないだろう。 読解力なさすぎだよ。
510 名前:デフォルトの名無しさん [2015/12/31(木) 02:17:21.09 ID:+JFM0ZYm.net] 読解力が足りないとか言いだしたぞ。このバカ。 > ループを再帰に変換すると、コンパイラが再帰をループに逆変換してくれる機能
511 名前:デフォルトの名無しさん mailto:sage [2015/12/31(木) 02:26:21.16 ID:Rb2meO2K.net] >>490 再帰はすべて機械的に末尾再帰に変換できる。 そんな基本的なことも知らないのは恥ずかしいだろう?
512 名前:デフォルトの名無しさん [2015/12/31(木) 02:32:06.38 ID:+JFM0ZYm.net] おー、すげー。天才現る。 これで、スタックオーバーフロー完全克服だ。
513 名前:デフォルトの名無しさん [2015/12/31(木) 02:52:07.07 ID:cXVC2Dha.net] 末尾再帰に変換できるとは言ったが,スタックオーバーフローを回避できるとは言ってない(キリッ
514 名前:デフォルトの名無しさん [2015/12/31(木) 03:04:20.45 ID:+JFM0ZYm.net] クイックソート10000倍高速化とか再帰→末尾再帰の自動変換とか、このスレには天才が多いな。
515 名前:デフォルトの名無しさん mailto:sage [2015/12/31(木) 07:33:29.73 ID:Rb2meO2K.net] CPS変換も知らんのか…
516 名前:デフォルトの名無しさん [2015/12/31(木) 09:52:41.50 ID:tmojp+ig.net] >>510 俺は第三者だ。 俺は書き込んだ奴の言いたいことが容易に把握できている。 それがキミにはできないという。 再帰についてのスレで再帰について書かれているのだから、バックボーンの違いではないだろう。 知識ではなく読解力の問題だ。 こんなもん小学生でも意味をくみ取るぞ。
517 名前:デフォルトの名無しさん [2016/01/01(金) 00:50:07.33 ID:PlqvFYu0.net] >>516 >>422 を理解出来てるのか? こりゃすげーわ。 ループを再帰の形にするときに、ループを再帰に変換すると、再帰をループに逆変換してくれるコンパイラの機能が末尾再帰? >>422 が末尾再帰を理解してない事が読み取れるだけだ。 それをお前が読み取れるという事は、同一人物以外あり得ない。
518 名前:デフォルトの名無しさん [2016/01/01(金) 00:56:33.12 ID:XLbYQ9mF.net] そんなんじゃ小説も読めないだろう。 末尾再帰とは、本来ループで書くべきものを再帰で書いた時にコンパイラが 自動でループに直す機能・・・という主張なのだろう。
519 名前:デフォルトの名無しさん [2016/01/01(金) 00:57:41.99 ID:PlqvFYu0.net] >>515 よくいるんだわ。より難解な前提が必要なのに、出来るよって言い出す奴。
520 名前:デフォルトの名無しさん [2016/01/01(金) 00:57:43.20 ID:XLbYQ9mF.net] 逆変換という言葉は、そういった前提があって出てくる言葉だと思うぞ。
521 名前:デフォルトの名無しさん mailto:sage [2016/01/01(金) 02:37:45.56 ID:mIgzxpKK.net] コンパイラが最適化してくれるならコンパイラにやらせるのが普通の話だよね
522 名前:デフォルトの名無しさん mailto:sage [2016/01/01(金) 08:22:45.99 ID:xWjlSole.net] >>521 ループの方が最適化効きやすいしな。
523 名前:デフォルトの名無しさん [2016/01/01(金) 08:28:26.90 ID:PlqvFYu0.net] >>520 末尾再帰の説明に「逆変換」を使うってどういう前提だよ www
524 名前:デフォルトの名無しさん [2016/01/01(金) 10:18:04.79 ID:TPZeTHW+.net] >>523 本来ループであるべきものをプログラマが再帰に変換しているので、 コンパイラがループに逆変換するという主張なのだろう。 お前、本当にこの程度の文章が読めないの? そんなんじゃ小説どころか論文も読めないだろう。 俺は元の文すら読んでいなく、引用されてるのを見てそこまで理解できてるぞ。 もう一度聞くけど、お前本当にこの程度の文が読めないの?
525 名前:デフォルトの名無しさん mailto:sage [2016/01/01(金) 11:36:06.33 ID:wTuRpENh.net] > インバータ(Inverter)とは、 > 直流電力から交流電力を電気的に生成する(逆変換する)電源回路、 > またはその回路を持つ電力変換装置のことである。 > 逆変換回路(ぎゃくへんかんかいろ)、逆変換装置(ぎゃくへんかんそうち)などとも呼ばれる。 逆変換w
526 名前:デフォルトの名無しさん mailto:sage [2016/01/01(金) 12:12:39.23 ID:D046Nv8F.net] >>519 >よくいるんだわ。より難解な前提が必要なのに、出来るよって言い出す奴。 何言ってんだこいつ
527 名前:デフォルトの名無しさん [2016/01/01(金) 15:45:58.36 ID:PlqvFYu0.net] >>524 おおー、スゲー その調子で>>422 を解説してくれや。
528 名前:デフォルトの名無しさん [2016/01/01(金) 15:48:40.55 ID:PlqvFYu0.net] >>526 読解力が、足りない。 半端な知識を振り回す知ったかぶりが沢山いるという事だよ。
529 名前:デフォルトの名無しさん [2016/01/01(金) 16:18:10.88 ID:TPZeTHW+.net] >>528 それは読解力関係ないだろう。 俺にも全く意味が分からなかった。 何言ってんだコイツ?というのが素直な感想。
530 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/01(金) 19:46:32.52 ID:FqzQpFZg.net] athos.hatenablog.com/entry/20110119/p1 ここまでこれの話題ないって相当終わったレベルの奴らしかこのスレにいないんだな さっさと死ねよ
531 名前:デフォルトの名無しさん mailto:sage [2016/01/01(金) 19:53:29.38 ID:BqDq7bML.net] >>530 そりゃrubyだからさ
532 名前:デフォルトの名無しさん [2016/01/01(金) 20:37:19.16 ID:KnWw4/o3.net] 今年もrubyのオワコン芸w
533 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/02(土) 03:28:12.35 ID:cdXNgg3P.net] >>531-532 本当に頭悪いカスだな rubyに限定せず実装出来ると思うけど技量的に理解すら無理な感じ? 再帰とループの変換や末尾再帰の話題には触れてもここはTCOという単語が今まで一回も出てこないという事実 「知ってる側」からすると嘘をついてるのがすぐにわかってしまう 知ったかぶりのクズ
534 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/02(土) 03:30:31.88 ID:cqMsfgi2.net] >>531-532 さっさと死ねよ
535 名前:デフォルトの名無しさん mailto:sage [2016/01/02(土) 09:53:52.00 ID:QH+c5K8j.net] >>533 だって末尾再帰なんてlisp/schemeでは当たり前だもの,今はgccでも当たり前だし いまさらrubyですかね‥
536 名前:デフォルトの名無しさん mailto:sage [2016/01/02(土) 13:32:29.04 ID:3O/U03ws.net] むしろ自分でやんないと末尾呼び最適化が利かない処理系って(ry
537 名前:デフォルトの名無しさん mailto:sage [2016/01/02(土) 15:04:15.58 ID:QH+c5K8j.net] なんだか遅れてるんだよねruby屋さんって
538 名前:デフォルトの名無しさん mailto:sage [2016/01/02(土) 15:39:39.87 ID:TZBdz3NA.net] rubyだからね。仕方ないね。
539 名前:デフォルトの名無しさん [2016/01/03(日) 22:30:43.03 ID:F57MRPO3.net] >>533 何度も出てるし「末尾再帰」といった時点でジャンプへの変換という意味を持っていってるんだよ。 最適化が無ければ「末尾」と特別な扱いをする意味が無い。 runyって最近言い出したのか。30年遅れてるな。
540 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/04(月) 03:42:45.74 ID:XM/1Dr6r.net] 理解度が低すぎる このアルゴリズムはこのスレでは初出だと認識してるけど 読めなくてわけわかんない状態か さっさと死ねゴミ
541 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/04(月) 03:51:45.48 ID:wtRTZBq6.net] 妥協点でPythonだからね それ以下の言語でアルゴリズム語ってるスレ見ると そこで話してる内容とか読む前に まずはスレ民を学習させる事から初めて レベルを上げてやらないと話にならない
542 名前:デフォルトの名無しさん mailto:sage [2016/01/04(月) 04:13:44.75 ID:u97FRQbx.net] >>540 末尾再帰のループ最適化は >>5 や >>507 ですでに出てきているよ >>541 最適化の話題なら python や ruby のようなインタプリタではなく コンパイラで比較するのが適切だね,インタプリタ上で速くなっても だれもうれしくない.C/C++一択だよ ま,fortran でもいいが
543 名前:デフォルトの名無しさん mailto:sage [2016/01/04(月) 04:55:36.62 ID:WY8liDeA.net] 再帰好きの人をサイキッカーと呼びたい
544 名前:デフォルトの名無しさん [2016/01/04(月) 10:03:14.86 ID:hsfrcHKj.net] いいなそれ
545 名前:デフォルトの名無しさん [2016/01/04(月) 12:27:00.00 ID:U406TFbL.net] 再帰好きの人のを中二コーダーと呼びたい
546 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/04(月) 15:06:50.79 ID:KNqXLa56.net] >>542 理解力なさすぎだな お前の学校の担任はさぞかし苦労したことだろう
547 名前:デフォルトの名無しさん mailto:sage [2016/01/04(月) 16:24:41.19 ID:u97FRQbx.net] >>546 どんな点をみて「理解力がない」と判断したのか? 説明できますかね,それとも吼えるだけ?
548 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 17:38:28.00 ID:7uWOp/tU.net] つか、末尾再帰ってループそのまんまで再帰の利点ないし recHoge1(a,n,arg...){ dobefore()... if(a<n)recHoge1(a,n,arg...); } loopHoge1(a,n,arg...){ while(a<n){ dobefore()... } } 再帰は無意味、使う必要なし recHoge2(a,n,arg...){ dobefore()... recHoge2(a,n,arg...); doafter()... } loopHoge2(a,n,arg...){ while(a<n){ pushargstack(); dobefore()... popargstack(); doafter()... } } 再帰で有意味、この場合使える
549 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 17:44:32.72 ID:7uWOp/tU.net] pop,push逆だった loopHoge2(a,n,arg...){ while(a<n){ popargstack(); dobefore()... pushargstack(); doafter()... } }
550 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 18:00:09.14 ID:7uWOp/tU.net] pushargstack(); popargstack(); ユーザー定義のこれらはめんどくさいから 再帰関数使ってコンパイラ任せにするよ
551 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/04(月) 18:13:29.66 ID:zTvWipKl.net] またゴミカス初心者が来たけど また1から説明して教育しなきゃいけないの?
552 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 18:16:50.81 ID:7uWOp/tU.net] recHoge1(term,arg...){ dobefore()... if(term)recHoge1(term,arg...); } loopHoge1(term,arg...){ while(term){ dobefore()... } } 再帰は無意味、使う必要なし recHoge2(term,arg...){ dobefore()... if(term)recHoge2(term,arg...); doafter()... } loopHoge2(term,arg...){ while(term){ popargstack(); dobefore()... if(term)continue; pushargstack(); doafter()... } } 再帰で有意味、この場合使える pushargstack(); popargstack(); ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ たったこれだけの内容
553 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 18:19:28.48 ID:7uWOp/tU.net] >>551 >>552 以上のことの何があるか説明してみてよ
554 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 18:42:48.29 ID:7uWOp/tU.net] ttp://nas6.main.jp/Maze.cpp 再帰、ループ、等価迷路
555 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 18:55:15.40 ID:7uWOp/tU.net] recHoge1(term,arg...){ dobefore()... if(term)recHoge1(term,arg...); } loopHoge1(term,arg...){ while(term){ dobefore()... } } 再帰は無意味、使う必要なし recHoge2(term,arg...){ dobefore()... if(term)recHoge2(term,arg...); doafter()... } loopHoge2(term,arg...){ while(term){ pushargstack(); dobefore()... if(term)continue; popargstack(); doafter()... } } 再帰で有意味、この場合使える pushargstack(); popargstack(); ユーザー定義のこれらはめんどくさいから、再帰関数使ってコンパイラ任せにするよ たったこれだけの内容 、勘違い訂正
556 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 19:03:49.25 ID:7uWOp/tU.net] >>554 で、 ループ実装が好きなやつはいないと思うんだけどな
557 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/04(月) 21:13:17.67 ID:KNqXLa56.net] RubyかPythonで書き直して C++とかいうゴミいらねーから
558 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 21:51:32.16 ID:7uWOp/tU.net] 「{C++規則をかなり抑えてCライク}で書かれたソースコード」 のクロスランゲッジなんて、ほぼ、ライブラリの関数名を書き換えるだけだろ
559 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 21:54:46.92 ID:7uWOp/tU.net] あ、あと制御構文もちゃっちゃっと書き換えれば出来上がり
560 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/04(月) 22:07:47.26 ID:mZvmD2Em.net] それをなぜ最初から簡潔な言語で書かないで わざわざ冗長したC++・C言語といった言語でドヤァとソースコード貼りつけてくるのか、理解しがたいんだけど カスレベルの初心者である事を数レスに渡る自己紹介でもしにきたのかね? アルゴリズムの抽象化でC++とか使う奴はその時点で初心者だって一瞬で分かるって言ってるのに 自分が知恵遅れだと分かってないままの奴が続々現れるからこういう場所は話題がループする
561 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/04(月) 22:08:20.17 ID:HCl/OTCR.net] >>559 死ね
562 名前:デフォルトの名無しさん [2016/01/04(月) 22:23:59.40 ID:JpzJLk3f.net] 熱烈なC++アンチって速度要求される場面に出会ったことがないんだろな もしくはフォートラン信者なんだろな
563 名前:デフォルトの名無しさん [2016/01/04(月) 22:31:14.13 ID:OFaVtQHO.net] オッパイソンはベーシックみたいなもんで非プログラマが使うのに適してるけど、 プログラマが使うには色々しょぼすぎ。 ペイントショッププロのマクロにオッパイソンが採用されたときは、来るかと思ったけど、 それを機に没落していった。 イヌックスの呪いは有名だけど、オッパイソンの呪いもあるのかもしれん。
564 名前:デフォルトの名無しさん [2016/01/04(月) 22:35:24.75 ID:OFaVtQHO.net] しかし、エクセルのマクロ使いはザラにいるのに、他のアプリはマクロ使いが ほとんどいないんだよな。 イーマックソとか言うウンコは置いといて。 CADなんかマクロの使いであると思うのだが。 Autocadなんかウンコ使いが泣いて喜ぶLisp搭載してるのにな。 なんでだ。
565 名前:デフォルトの名無しさん mailto:sage [2016/01/04(月) 22:55:58.31 ID:8iRyCi7U.net] とりあえずuyがほんとになにもわかってないことだけわかった
566 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 23:00:49.51 ID:7uWOp/tU.net] ruby知らんがこんな感じだろ def recHoge2(term,arg...) dobefore(arg...) if term recHoge2(term,arg...) end doafter(arg...) end end def loopHoge2(term,arg...) while term pushargstack(arg...) dobefore(arg...) if term next end popargstack(arg...) doafter(arg...) end end
567 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 23:01:55.35 ID:7uWOp/tU.net] class stack def initialize @ret = -1 @crnt = 0 @MAX_STACK = 32768 @stk[MAX_STACK] end def pop_stk() if -1 < crnt ret = stk[crnt] crnt = crnt - 1 end end def push_stk(v) if crnt < MAX_STACK - 1 crnt = crnt + 1 stk[crnt] = v end end end stk = stack def pushargstack(arg1...argn) stk.push_stk(arg1) ... stk.push_stk(argn) end def popargstack(arg1...argn) argn = stk.pop_stk() ... arg1 = stk.pop_stk() end
568 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 23:07:46.09 ID:7uWOp/tU.net] def recHoge2(term,arg...) dobefore(arg...) if term recHoge2(term,arg...) end doafter(arg...) end で、こんだけで済むのに、 ループにしたいからって スタックのユーザー定義なんて馬鹿だろう
569 名前:NAS6 ◆n3AmnVhjwc [2016/01/04(月) 23:22:49.68 ID:7uWOp/tU.net] 再帰をループにしたかったら こういうのをいちいち作らなきゃだめだよ class stack def initialize @crnt = 0 @MAX_STACK = 32768 @stk[MAX_STACK] end def pop_stk() if -1 < crnt ret = stk[crnt] crnt = crnt - 1 return ret end end def push_stk(v) if crnt < MAX_STACK - 1 crnt = crnt + 1 stk[crnt] = v end end end
570 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/05(火) 02:57:13.31 ID:/kPL7pQm.net] プログラミング半年目くらいだろうかコイツは 多く見積もって1年半 それ以上なら今すぐPC捨てたほうが良いレベル
571 名前:デフォルトの名無しさん [2016/01/05(火) 02:58:35.02 ID:3cj4CitF.net] >>569 www.rubylife.jp/ini/ www.tohoho-web.com/python/index.html qiita.com/ozw_sei/items/b45e316fced8aec9a97e
572 名前:デフォルトの名無しさん [2016/01/05(火) 02:59:25.81 ID:CnA8UQLB.net] 死ねカス
573 名前:NAS6 ◆n3AmnVhjwc [2016/01/05(火) 06:30:43.49 ID:FnNfbNzM.net] Array.push()、Array.pop()があるんね >>568 で済む内容を、ループで書きたかったら↓しなければならない def loopHoge2(term,arg...) while term pushargstack(arg...) dobefore(arg...) if term next end popargstack(arg...) doafter(arg...) end end stk = Array.new() def pushargstack(arg1...argn) stk.push(arg1) ... stk.push(argn) end def popargstack(arg1...argn) argn = stk.pop() ... arg1 = stk.pop() end
574 名前:NAS6 ◆n3AmnVhjwc [2016/01/05(火) 06:44:29.17 ID:FnNfbNzM.net] def recHoge2(term,arg1...argn) dobefore(arg1...argn) if term recHoge2(term,arg1...argn) end doafter(arg1...argn) end ↑は、こう↓書き換えられる def loopHoge2(term,arg1...argn) while term pushargstack(arg1...argn) dobefore(arg1...argn) if term next end popargstack(arg1...argn) doafter(arg1...argn) end end stk = Array.new() def pushargstack(arg1...argn) stk.push(arg1) ... stk.push(argn) end def popargstack(arg1...argn) argn = stk.pop() ... arg1 = stk.pop() end
575 名前:NAS6 ◆n3AmnVhjwc [2016/01/05(火) 07:30:28.12 ID:FnNfbNzM.net] #同色上書き塗りつぶし def refill(dest,src,x,y,color,minx,miny,maxx,maxy) if (x < minx) || (maxx < x) ||(y < miny) || (maxy < y) return end dest[y][x] = color #上 if (src[y-1][x] == color) && (dest[y-1][x] != color) refill(dest,src,x,y-1,color,minx,miny,maxx,maxy) end #左 if (src[y][x-1] == color) && (dest[y][x-1] != color) refill(dest,src,x-1,y,color,minx,miny,maxx,maxy) end #下 if (src[y+1][x] == color) && (dest[y+1][x] != color) refill(dest,src,x,y+1,color,minx,miny,maxx,maxy) end #右 if (src[y][x+1] == color) && (dest[y][x+1] != color) refill(dest,src,x+1,y,color,minx,miny,maxx,maxy) end end ↑のループ等価が↓
576 名前:NAS6 ◆n3AmnVhjwc [2016/01/05(火) 07:31:25.96 ID:FnNfbNzM.net] stk =Array.new() #同色上書き塗りつぶし def loop_refill(dest,src,x,y,color,minx,miny,maxx,maxy) term = 0 while !((x < minx) || (maxx < x) ||(y < miny) || (maxy < y)) dest[y][x] = color #上 if (term < 1) && (src[y-1][x] == color) && (dest[y-1][x] != color) term = 0 stk.push(x) stk.push(y) stk.push(term) y = y - 1 term = 0 next end #左 if (term < 2) && (src[y][x-1] == color) && (dest[y][x-1] != color) term = 1 stk.push(x) stk.push(y) stk.push(term) x = x - 1 term = 0 next end
577 名前:NAS6 ◆n3AmnVhjwc [2016/01/05(火) 07:31:53.09 ID:FnNfbNzM.net] #下 if (term < 3) && (src[y+1][x] == color) && (dest[y+1][x] != color) term = 2 stk.push(x) stk.push(y) stk.push(term) y = y + 1 term = 0 next end #右 if (term < 4) && (src[y][x+1] == color) && (dest[y][x+1] != color) term = 3 stk.push(x) stk.push(y) stk.push(term) x = x + 1 term = 0 next end term = stk.pop() y = stk.pop() x = stk.pop() end end
578 名前:NAS6 ◆n3AmnVhjwc [2016/01/05(火) 07:34:06.45 ID:FnNfbNzM.net] 再帰関数を無理矢理ループで書くことが 正解だなんてとても思えないんだけど・・・
579 名前:NAS6 ◆n3AmnVhjwc [2016/01/05(火) 07:57:54.39 ID:FnNfbNzM.net] >>575-577 はdestにcolorが最初から使われていると、それ以上塗れないバグがあるな ま、いいか
580 名前:NAS6 ◆n3AmnVhjwc [2016/01/05(火) 08:01:46.66 ID:FnNfbNzM.net] destはコピー先だからそういう条件でクリア済みってことで
581 名前:NAS6 ◆n3AmnVhjwc [2016/01/05(火) 08:14:57.62 ID:FnNfbNzM.net] 2色必要だった・・・ srcのx,yからcolor2の連続部分をdestにcolor1で塗りつぶし #同色上書き塗りつぶし def refill(dest,src,x,y,color1,color2,minx,miny,maxx,maxy) if (x < minx) || (maxx < x) ||(y < miny) || (maxy < y) return end dest[y][x] = color1 #上 if (src[y-1][x] == color2) && (dest[y-1][x] != color1) refill(dest,src,x,y-1,color1,color2,minx,miny,maxx,maxy) end #左 if (src[y][x-1] == color2) && (dest[y][x-1] != color1) refill(dest,src,x-1,y,color1,color2,minx,miny,maxx,maxy) end #下 if (src[y+1][x] == color2) && (dest[y+1][x] != color1) refill(dest,src,x,y+1,color1,color2,minx,miny,maxx,maxy) end #右 if (src[y][x+1] == color2) && (dest[y][x+1] != color1) refill(dest,src,x+1,y,color1,color2,minx,miny,maxx,maxy) end end
582 名前:NAS6 ◆n3AmnVhjwc [2016/01/05(火) 08:16:57.10 ID:FnNfbNzM.net] >>576-577 も同様に直してね
583 名前:NAS6 ◆n3AmnVhjwc [2016/01/05(火) 08:48:45.20 ID:FnNfbNzM.net] recHoge2(term,arg1...argn){ dobefore(arg1...argn); if(term)recHoge2(term,arg1...argn); doafter(arg1...argn); } この↑再帰関数を無理矢理 loopHoge2(term,arg1...argn){ while(term){ pushargstack(arg1...argn); dobefore(arg1...argn); if(term){continue;} popargstack(arg1...argn); doafter(arg1...argn); } } ループで書くのはpushargstack()popargstack()書くのもだし 再帰関数でreturnされた時の箇所で 制御をdoafter()に飛ばすように考えるのもめんどくさい つまり、再帰関数の構造化の部分までなんでわざわざ コーディングする必要があるのか謎
584 名前:デフォルトの名無しさん mailto:sage [2016/01/05(火) 23:45:47.40 ID:zRwuHMxA.net] そうだね、グリーンだね。 任意の再帰はスタックを使えばループに書き直せるし、任意のループは末尾再帰で書き表せるけど 書きやすい方で書いたら良いんじゃない? 配列を舐めるだけのループをわざわざ再帰で書く必要はないし、 二分木を舐めるだけの再帰をわざわざループで書く必要はない。 勿論例外は幾つもあるけどね。
585 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/06(水) 01:13:15.45 ID:kZN9AhFE.net] 死ね → NAS6 ◆n3AmnVhjw
586 名前:デフォルトの名無しさん mailto:sage [2016/01/06(水) 01:26:34.40 ID:2plodUsJ.net] >>585 語彙少なすぎだろ
587 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/06(水) 05:38:10.76 ID:NwAUbAKq.net] 時間とフィンガーポイントを無駄にしたくない
588 名前:デフォルトの名無しさん mailto:sage [2016/01/06(水) 11:44:51.16 ID:Hrty1iRZ.net] ばいばい
589 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/07(木) 03:29:43.72 ID:VBUUQOGk.net] MPC
590 名前:デフォルトの名無しさん mailto:sage [2016/01/07(木) 14:29:25.41 ID:9s+XESwg.net] >>589 時間とフィンガーポイントを無駄にしない為に今すぐ2chから立ち去るんだ! さぁ早く!
591 名前:デフォルトの名無しさん mailto:sage [2016/01/07(木) 23:10:34.37 ID:ceukK3gk.net] またuyが言い負かされてると聞いて
592 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/08(金) 07:36:31.52 ID:37pbuAYe.net] kakaku.com/item/K0000791258/ これを使ってるけど打ちにくい 隙間にゴミが入りにくいキーボードで何か探してくれれば長文レス出来るけど ゲームもやるから同時押しが出来ないキーボードは使えないんだよ バッファローのこのキーボード系列は 何故かゲーミングキーボードでもない癖にかなりの同時押しが出来る お前らもこれくらい社会の役に立ってくれ
593 名前:デフォルトの名無しさん mailto:sage [2016/01/08(金) 07:58:14.49 ID:qSmN42Fw.net] 長文レスなんざしなくていいから死ね
594 名前:デフォルトの名無しさん mailto:sage [2016/01/08(金) 08:06:15.22 ID:t0B3KsjR.net] ゲームなどという恥ずかしいご趣味をお持ちのようで
595 名前:デフォルトの名無しさん mailto:sage [2016/01/08(金) 12:51:08.30 ID:OGMciHiU.net] tail callはrecursive callと直行する概念だと理解してないのが何人かいるな
596 名前:デフォルトの名無しさん [2016/01/08(金) 12:54:36.23 ID:qoujFuKs.net] 直行てなんやねんwてのが何人もいるな
597 名前:デフォルトの名無しさん mailto:sage [2016/01/08(金) 13:19:39.58 ID:39T3KdLp.net] 読みやすい方で書いたらいいんちゃうの? 無理にループにしてソース長くしてテスト項目増やす奴の気がしれんわ
598 名前:デフォルトの名無しさん mailto:sage [2016/01/08(金) 13:22:10.55 ID:39T3KdLp.net] 取り敢えずutがカスだってのは旗から見てわかった 補足しておくけどループで済むものを再起にしろと言ってるわけではないからな
599 名前:デフォルトの名無しさん mailto:sage [2016/01/08(金) 14:05:20.20 ID:qSmN42Fw.net] そりゃrecursiveじゃないtail callなんざ幾らでもあるわ
600 名前:デフォルトの名無しさん mailto:sage [2016/01/08(金) 14:44:50.10 ID:oo2zXXZh.net] 流し https://pbs.twimg.com/media/CL3nAldUYAEC9OE.jpg:large
601 名前:デフォルトの名無しさん mailto:sage [2016/01/08(金) 19:53:25.00 ID:XdIzL1DI.net] 仮にもプログラマならHHK使ってます自慢くらいしろよっていう そういう俺はreal forceだけど。
602 名前:デフォルトの名無しさん mailto:sage [2016/01/08(金) 22:36:48.34 ID:ktsgJ36p.net] >>595 まっすぐ行ってどうすんねん…
603 名前:デフォルトの名無しさん mailto:sage [2016/01/08(金) 22:52:34.47 ID:Ydps26p4.net] ワロタ
604 名前:デフォルトの名無しさん [2016/01/09(土) 19:28:51.30 ID:j10t/SxZ.net] 芸能界で生きていけるレベルの芸だな。
605 名前:uy ◆Qawu9.2l1E mailto:sage [2016/01/13(水) 15:37:06.33 ID:KvZEN8k1.net] 自分はプログラマじゃないんだよ 目的を最高効率で達成する事を念頭に置いてるスクリプトキディだ そして複数人でプログラムを組むときに必要なノウハウなんて持ってない そもそも自分はそういう事をしなくて良いから、生きてく上で必要無い配慮だから 周りが読みにくいとか知った事ではないし 身分がちげーんだよカス
606 名前:デフォルトの名無しさん [2016/01/13(水) 16:53:37.49 ID:QjeDGB/s.net] スクリプトキディの意味も知らないのな
607 名前:デフォルトの名無しさん mailto:sage [2016/01/13(水) 16:58:20.95 ID:4eNfFdO0.net] (他人の作った)スクリプトを使うしか能の無いお子様 正しく自分のこと理解してるということでいいのかもしれないですね。
608 名前:デフォルトの名無しさん [2016/01/13(水) 18:34:23.73 ID:QjeDGB/s.net] 正しく自分を理解していたら、あんなバカな生態を晒し続けるわけが無い スクリプトキディとは、他人の作ったスクリプトでいたずらしてはしゃぐお子様の事だね
609 名前:デフォルトの名無しさん mailto:sage [2016/01/13(水) 19:01:27.17 ID:U6rexLyV.net] にちゃんに
610 名前:デフォルトの名無しさん mailto:sage [2016/01/13(水) 19:03:20.75 ID:U6rexLyV.net] 誤送信 2ちゃんに書き込んでる地点で効率最悪といえる
611 名前:デフォルトの名無しさん mailto:sage [2016/01/13(水) 21:24:04.62 ID:VbVWsLR9.net] 地点?
612 名前:デフォルトの名無しさん mailto:sage [2016/01/13(水) 22:25:51.39 ID:IMboGSkT.net] 数学的な再帰定義関数は好き プログラムの再帰定義は多少罪悪感が
613 名前:デフォルトの名無しさん mailto:sage [2016/01/14(木) 05:26:27.60 ID:uv3Ej0dB.net] 身分は再起する
614 名前:デフォルトの名無しさん mailto:sage [2016/01/15(金) 10:47:33.86 ID:u0Mj97aD.net] >>605 読みやすさを考慮しなくていいとか言うなら、ソースあげんなksが
615 名前:デフォルトの名無しさん [2016/01/15(金) 20:31:31.62 ID:POz82VxF.net] まともなプログラムは再帰使わないて Javaじゃ標準でhashでもvisitorでも使ってるやん 初心者かな?
616 名前:デフォルトの名無しさん [2016/01/15(金) 20:52:05.45 ID:DNDI2k7a.net] >>615 ウェブサイトがハッキングされるのはそのせいかもしれませんね。
617 名前:デフォルトの名無しさん [2016/01/15(金) 20:59:16.36 ID:POz82VxF.net] ワロタ 何別人ぶってるんだコイツ
618 名前:デフォルトの名無しさん [2016/01/15(金) 21:40:58.93 ID:bARE8Ecx.net] Javaがまともじゃないとか何様だよ
619 名前:デフォルトの名無しさん [2016/01/15(金) 22:51:22.58 ID:DNDI2k7a.net] Haskellを知ればJavaなんぞ子供のおもちゃにも及ばない。
620 名前:デフォルトの名無しさん mailto:sage [2016/01/15(金) 22:52:36.63 ID:nz6sd5//.net] でも cloujure が気になるのです‥
621 名前:デフォルトの名無しさん [2016/01/16(土) 20:53:37.66 ID:mv0cs2FW.net] データベース扱いにくいゴミ
622 名前:デフォルトの名無しさん [2016/01/16(土) 22:18:41.95 ID:8IHN4wdz.net] データベースは扱いにくいゴミだそうです。
623 名前:デフォルトの名無しさん mailto:sage [2016/01/17(日) 15:36:45.95 ID:LBaM8j14.net] いや、もしかしたら データベースを扱うのに困難を伴うゴミ人間って意味かも
624 名前:デフォルトの名無しさん [2016/01/17(日) 18:00:23.51 ID:UWpoaTz9.net] もしかして、もしかしてだけどさ、Haskelのこと言ってるんじゃね?
625 名前:デフォルトの名無しさん mailto:sage [2016/01/18(月) 05:28:47.91 ID:lC5RiWYz.net] Haskellほどデータベース扱いやすい言語も少ないからそれはない
626 名前:デフォルトの名無しさん [2016/01/18(月) 20:02:16.24 ID:DTRfKFLk.net] 世界一のデータベースを持つと言われるGoogleがHaskellで動いているくらいだからね。
627 名前:デフォルトの名無しさん mailto:sage [2016/01/18(月) 20:42:43.12 ID:1d5YkXP9.net] Haskellって実用で使われてんのかw おもちゃかと思ってたわw
628 名前:デフォルトの名無しさん [2016/01/19(火) 15:31:29.42 ID:py3nDmvs.net] おもちゃだよ Googleのおもちゃ
629 名前:デフォルトの名無しさん mailto:sage [2016/01/19(火) 21:26:53.35 ID:C1tOs2Eu.net] この世はおもちゃで十分
630 名前:デフォルトの名無しさん mailto:sage [2016/01/20(水) 12:31:10.14 ID:K5mS7ftq.net] 2ちゃんは漏れらのおもちゃ
631 名前:デフォルトの名無しさん [2016/01/20(水) 17:52:59.34 ID:Evm4j3E4.net] 漏れらとか使う香具師久しぶりに見たわ
632 名前:デフォルトの名無しさん mailto:sage [2016/01/20(水) 19:02:11.21 ID:aKBKow0I.net] イッテヨシとかギコはにゃーんとかもう死語なんだろうな。 ゴルァはまだありかな。
633 名前:デフォルトの名無しさん mailto:sage [2016/01/21(木) 12:48:08.73 ID:zpe1QHZ3.net] ヌルポにはガッっていうのはなぜだったのか理由がいまだに判らないので 香具師にどう反応すればいいのかも判らない
634 名前:デフォルトの名無しさん mailto:sage [2016/01/21(木) 23:38:12.84 ID:C4EemGup.net] >>633 ぬるぽにかぎらず、例外発生したら、ガッ!
635 名前:デフォルトの名無しさん mailto:sage [2016/01/22(金) 01:18:00.03 ID:G5rv7JJ3.net] >>633 NullPointerExceptionをぬるぽと呼ぶスレだかなんだかいうスレタイのスレが立った2分後に 2が1にガッしたから だった筈
636 名前:デフォルトの名無しさん mailto:sage [2016/01/22(金) 11:22:37.47 ID:vIHZAGQE.net] ヌルポ
637 名前:デフォルトの名無しさん [2016/01/22(金) 17:22:39.92 ID:AzZButyZ.net] たたき続けなさい さすればヌルポは失せるでしょう
638 名前:デフォルトの名無しさん mailto:sage [2016/01/23(土) 18:27:15.12 ID:TOjqi36j.net] >>636 catch
639 名前:デフォルトの名無しさん mailto:sage [2016/01/23(土) 18:56:26.79 ID:0d2orZXz.net] >>638 ガッてキャッチのことだったの?
640 名前:デフォルトの名無しさん [2016/01/31(日) 18:53:58.36 ID:N9Aq8poo.net] >>638 そしてスローせず
641 名前:デフォルトの名無しさん mailto:sage [2016/01/31(日) 21:42:25.99 ID:OzonL4m2.net] ガッはガッチャの略だろ。 ガッチャマンでお馴染みのガッチャはI have got you.の略で捕まえたとかの意味。
642 名前:デフォルトの名無しさん [2016/02/01(月) 01:42:44.99 ID:IP+vl4xQ.net] でもアメリカのドラマ見てると了解するときにガッチャ!って言ってるよね。 特にチャーリーズエンジェルのカエル顔が(別のドラマでも)言ってるような気がする。
643 名前:デフォルトの名無しさん mailto:sage [2016/02/19(金) 20:26:15.94 ID:wEwKzS1i.net] 再帰使うとエラーの予測が立てにくい
644 名前:デフォルトの名無しさん mailto:sage [2016/02/19(金) 22:00:01.71 ID:eeiEIdAh.net] それ再帰のせいじゃなくてもともと難しいアルゴリズムなんじゃ
645 名前:デフォルトの名無しさん mailto:sage [2016/02/19(金) 22:04:28.48 ID:jxx0XdOv.net] 再帰の方が簡単に難しいアルゴリズムを作れる
646 名前:デフォルトの名無しさん mailto:sage [2016/02/19(金) 22:41:27.96 ID:wEwKzS1i.net] 同じコードでも言語やバージョンの違いで即死する可能性があるのがネック。 可能ならwhileにするよ。 どうでもいいスクリプトなら木にしないけど。 べ、別に再帰関数苦手なわけじゃないんだからね!
647 名前:デフォルトの名無しさん mailto:sage [2016/02/24(水) 00:10:47.14 ID:i1Xglt1a.net] 再帰否定する奴は局所変数も否定すんの?
648 名前:uy ◆Qawu9.2l1E [2016/02/25(木) 06:44:19.41 ID:loCQbBq3.net] 再帰否定派は生きるのがつらいんだよ いつも周りのもの何もかも否定してるよ
649 名前:デフォルトの名無しさん mailto:sage [2016/02/25(木) 12:35:19.93 ID:tc7lGvfi.net] 無限か有限かを判別するだけでも難しい再帰コールが簡単に作れるからな
650 名前:デフォルトの名無しさん mailto:sage [2016/02/25(木) 22:13:06.90 ID:OuMkr9Sq.net] ループなら無限か有限か簡単に判別できるとでも?
651 名前:デフォルトの名無しさん mailto:sage [2016/02/26(金) 03:25:44.03 ID:VdCPJ0Vc.net] 再帰の方が簡単に作れる
652 名前:デフォルトの名無しさん mailto:sage [2016/02/26(金) 03:33:16.76 ID:VdCPJ0Vc.net] 例えば再帰を使えばC++149文字で数学的に非常に判別が難しいコードが作れる ステップ数がF_φ_ω(0) (n)のオーダー 再帰を使わないともっとずっと必要な文字数は増える
653 名前:デフォルトの名無しさん [2016/02/26(金) 12:24:24.63 ID:x5+an1W2.net] つまり再帰を使うと簡単に分かりにくいコードが書けてしまうというアピール アホなのこいつ?
654 名前:デフォルトの名無しさん mailto:sage [2016/02/26(金) 12:55:19.99 ID:V8jyQAYV.net] まともなプログラマーしかいなけりゃ問題ないよ
655 名前:デフォルトの名無しさん mailto:sage [2016/02/26(金) 20:22:01.88 ID:KBsVtPlI.net] 適材適所 まぁ、ループは現代ではほとんど高階関数に置き換えられてはいるが
656 名前:デフォルトの名無しさん mailto:sage [2016/02/26(金) 20:31:47.39 ID:VdCPJ0Vc.net] そうか?
657 名前:デフォルトの名無しさん mailto:sage [2016/02/27(土) 09:47:03.89 ID:GGk6IaQQ.net] 再帰、ループ、高階関数は互いに別カテゴリーの概念だけどな。
658 名前:デフォルトの名無しさん mailto:sage [2016/02/27(土) 13:35:50.10 ID:wN2C/qqy.net] >ループは現代ではほとんど高階関数に置き換えられてはいるが mapとかfoldって言いたいの?
659 名前:デフォルトの名無しさん mailto:sage [2016/02/29(月) 09:52:02.11 ID:+UQXiICf.net] ファンクショナルのことだろ
660 名前:デフォルトの名無しさん mailto:sage [2016/02/29(月) 12:09:46.90 ID:gY4tu7UX.net] Yコンビネータの事かも
661 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 08:19:26.32 ID:C1oJ0ySj.net] 最近の言語は分かり易いから好んで使う人多いみたいだね。 俺はダメだわ。単純な再帰でもアセンブラ時代の間接修飾と再帰を混合で使ってたときのトラウマが・・・
662 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 13:03:33.56 ID:4AspLwzf.net] スタック使うから組み込みでは禁則かな
663 名前:デフォルトの名無しさん mailto:sage [2016/03/05(土) 16:01:56.83 ID:Xc1YGBo+.net] 末尾呼びにすればぁ?
664 名前:デフォルトの名無しさん mailto:sage [2016/03/06(日) 13:58:13.11 ID:9mzH85Ox.net] 無理して使う物ではないのは、確か。
665 名前:デフォルトの名無しさん [2016/03/07(月) 19:41:03.81 ID:0qoaCMqF.net] 今更だけどアッカーマンの展開ループです https://ideone.com/dKocyf これループに直せません? https://ideone.com/Ub1M86
666 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 20:15:13.20 ID:X8YwrOCo.net] >>665 ループ,というよりは map によるメモ化を先にするべきかと思う
667 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 20:44:00.00 ID:ouSCK2N5.net] アッカーマンメモ化はやめとけ メモリ使用量がシャレにならん。 小さい引数ならいいけど。
668 名前:デフォルトの名無しさん mailto:sage [2016/03/07(月) 23:04:02.15 ID:ouSCK2N5.net] と思ったけどスタック消費量は逆に減る? よくわからんくなってきた。
669 名前:デフォルトの名無しさん [2016/03/07(月) 23:55:21.18 ID:DhnnCcYX.net] >>668 アッカーマンはメモ化意味ない
670 名前:デフォルトの名無しさん mailto:sage [2016/03/08(火) 06:31:35.48 ID:mBS7w7C0.net] しかしヤッターマンならきっとやってくれる
671 名前:デフォルトの名無しさん mailto:sage [2016/03/09(水) 19:45:38.58 ID:8kThrIH6.net] >>669 それはありえない. アッカーマン関数にメモ化は有用な手段 echo.2ch.net/test/read.cgi/tech/1434079972/14
672 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 20:46:33.65 ID:Ar6pzjDU.net] メモ化とかメモリリークしてるに等しい欠陥技術でしょ。
673 名前:デフォルトの名無しさん mailto:sage [2016/03/15(火) 20:54:37.80 ID:RIoPtDsj.net] >>672 fjの昔からの議論をここで蒸し返しますか?
674 名前:デフォルトの名無しさん mailto:sage [2016/03/25(金) 20:10:31.18 ID:ARWxn+lM.net] 再帰というソフトにはスタックというハードがあるけどほかのソフトをハードで実装するのはどうなの? GCとかハードで実装してまったくフリーズなしに出来ないの?
675 名前:デフォルトの名無しさん mailto:sage [2016/03/27(日) 16:40:13.75 ID:WR+Y3fPV.net] int main(){return main();}
676 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 20:21:06.47 ID:qF1fcJk9.net] とあるRubyスクリプトだけどこれと等価のC書けんの? $f=lambda{ print "f"; return $g } $g=lambda{ print "g" return $f } a=$f 10.times{a=a.call}
677 名前:デフォルトの名無しさん [2016/03/31(木) 20:26:53.36 ID:+v8smRGz.net] rubyはcで書かれているんやで知らんかったやろ?
678 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 20:35:19.21 ID:qF1fcJk9.net] そういう等価じゃなくて文法的にというか。 Cだと$fと$gの型をどうしていいかわからん。
679 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 21:08:44.15 ID:qF1fcJk9.net] グローバル変数じゃなくてもこれでいけるっぽい g=nil f=lambda{ print "f"; return g } g=lambda{ print "g" return f } a=f 10.times{a=a.call}
680 名前:デフォルトの名無しさん [2016/03/31(木) 21:11:44.63 ID:+v8smRGz.net] typedef void *(*F)()でいいやんけ
681 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 21:15:14.22 ID:qF1fcJk9.net] まじで やってみる
682 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 21:20:03.99 ID:qF1fcJk9.net] やりかたわからん。 コンパイル通るソースプリーズ
683 名前:デフォルトの名無しさん [2016/03/31(木) 21:36:59.68 ID:+v8smRGz.net] これでいけるやろ #include <stdio.h> typedef void *(*F)(); void *f(); void *g(); void *f() { puts("f"); return g; } void *g() { puts("g"); return f; } int main() { int i; F func; func = f; for (i = 0; i < 10; ++i) func = func(); return 0; }
684 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 21:42:19.47 ID:qF1fcJk9.net] g++だとエラーになるんだが。 コンパイラは何で確認した?
685 名前:デフォルトの名無しさん [2016/03/31(木) 21:46:42.36 ID:+v8smRGz.net] なんでいきなりg++やねんw これ以上はcの質問スレでもいって聞けタコ
686 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 21:55:26.05 ID:qF1fcJk9.net] なんだ、結局コンパイル通ってないのか
687 名前:デフォルトの名無しさん [2016/03/31(木) 22:06:32.37 ID:+v8smRGz.net] 通るわアホw つーかそんなレベルでよくその質問出来るなお前
688 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 22:09:21.97 ID:qF1fcJk9.net] だからコンパイラは何つかったんよ。 こっちでも確認するから教えれ。 有料コンパイラだったら諦めるけど。
689 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 22:22:46.20 ID:qF1fcJk9.net] まあ、C質問スレにもマルチしてみるわ
690 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 22:23:23.28 ID:X8/ytHGi.net] >>684 ここではうまくいく codepad.org/vXykoc8I
691 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 22:34:22.91 ID:qF1fcJk9.net] >>690 ふーむ確かに。 コンパイラがC++だといかんの?
692 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 22:49:44.78 ID:qF1fcJk9.net] キャストすればいいのか
693 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 22:50:45.57 ID:qF1fcJk9.net] しかしvoid * はなにか負けたような気分になるなw
694 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 23:19:06.00 ID:rR3RT0GR.net] キャストが嫌ならちゃんと型定義すればいいじゃん と思ったがちゃんとやるには自己参照型定義みたいなのが必要になるのか Cでそれってできるのかな 関数型Fのポインタを返す関数型をFと定義
695 名前:デフォルトの名無しさん mailto:sage [2016/03/31(木) 23:22:26.42 ID:qF1fcJk9.net] >>694 そう、それ! 俺もそれで悩んだ。
696 名前:デフォルトの名無しさん [2016/04/01(金) 00:06:13.07 ID:hr4pCajV.net] お前はその前に悩むべき問題が山程あるだろw
697 名前:デフォルトの名無しさん mailto:sage [2016/04/01(金) 03:40:11.25 ID:0hX+vVN6.net] voidにキャストがどうのって、rubyでコード書くような奴に言われてもなぁ。
698 名前:デフォルトの名無しさん mailto:sage [2016/04/01(金) 22:07:22.21 ID:8s2Zo6V8.net] >関数型Fのポインタを返す関数型をFと定義 これ定義できる静的型言語ってあるの? それとも本質的論理的に矛盾した型であって、どうやっても定義できないの?
699 名前:デフォルトの名無しさん mailto:sage [2016/04/06(水) 03:07:16.94 ID:0S+muf67.net] Forループは正直見た目が汚らしい 場合にもよるんだろうけど、再帰で書けるならそっちのほうがコードが綺麗になる
700 名前:デフォルトの名無しさん [2016/04/06(水) 12:22:11.84 ID:N51toXoc.net] いかにもルビイバカらしい考え方だな
701 名前:デフォルトの名無しさん mailto:sage [2016/04/06(水) 19:04:18.80 ID:H8hE7WlY.net] なんでルビイなんだ? ハスケルバカならまだわかるが。
702 名前:デフォルトの名無しさん mailto:sage [2016/04/06(水) 23:26:38.04 ID:UScN8EXw.net] るびいもはすけるもよく知らないんでしょ
703 名前:デフォルトの名無しさん mailto:sage [2016/04/14(木) 21:05:36.57 ID:Lg/h7ZOX.net] Y = λf.(λx.f (x x)) (λx.f (x x))
704 名前:デフォルトの名無しさん mailto:sage [2016/04/14(木) 22:00:43.41 ID:Lg/h7ZOX.net] #include<stdio.h> char*s="#include<stdio.h>%cchar*s=%c%s%c;main(){printf(s,10,34,s,34);return 0;}";main(){printf(s,10,34,s,34);return 0;}
705 名前:デフォルトの名無しさん mailto:sage [2016/04/23(土) 00:44:20.59 ID:voC0Rj8b.net] ピクセルシェーダーで再帰関数使えるようになるのはいつだろうか
706 名前:デフォルトの名無しさん mailto:sage [2016/04/24(日) 20:32:40.26 ID:Y7E1SWkm.net] CPUがGPU化するのが先かGPUがCPU化するのが先か。 まあ超並列プログラムは憧れるけどね。
707 名前:デフォルトの名無しさん mailto:sage [2016/04/26(火) 20:14:03.31 ID:ymr+ysub.net] main = putStrLn $ q ++ show q where q = "main = putStrLn $ q ++ show q where q = "
708 名前:デフォルトの名無しさん mailto:sage [2016/04/27(水) 01:24:44.62 ID:Pvz0UkFG.net] 超並列はどうしてもデータレースが怖いからハードウェアトランザクションは必須だな
709 名前:デフォルトの名無しさん mailto:sage [2016/04/28(木) 20:33:07.32 ID:B776VxzF.net] ツクツクボウシの鳴き声を一番正確に表せた奴が優勝 [無断転載禁止]©2ch.net 1 :以下、無断転載禁止でVIPがお送りします:2016/04/28(木) 08:01:56.231 ID:EVnE4ji20 ツクツクボーシッ!!!!ツクツクボーシッ!!!!ツククツ、ツククククククク……!!! アッ ヴィーナス!!!! ヴィーナス!!!!ヴィヴィヴィヴィッ!!!!! 8 :以下、無断転載禁止でVIPがお送りします:2016/04/28(木) 08:05:05.180 ID:rZ8gq0650 ツクツクホーシ!ツクツクホーシ!ッツクツク、ツクツクホーシ! ッ!ツクツクヴィーヨー!ツクツクヴィーヨー!ツクツクツクツクアアアアア゙ア゙ア゙ア゙ア゙…天 12 :以下、無断転載禁止でVIPがお送りします:2016/04/28(木) 08:24:50.425 ID:SYCMGSQFa ツクツクウィーヨーンwwwwwwツクツクウィーヨーンwwwwwwウィーヨーンwwwwwwウィーヨーンwwwwwwあああああああああああああああ あ!!!!!!!
710 名前:デフォルトの名無しさん [2016/04/30(土) 22:02:43.20 ID:uVz81x78.net] GitHubで匿名通信(Tor、i2p等)ができるBitComet(トラッカーサイト不要でDHTだけで日本語検索可能) みたいな、BitTorrentがオープンソースで開発されています 言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか? Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします https://twitter.com/Lyrise_al ちなみにオイラはCovenant(純粋P2Pのファイル共有ソフト)の完成が待ち遠しいプログラミングできないアスペルガーw q
711 名前:デフォルトの名無しさん [2016/05/04(水) 10:34:46.82 ID:PLBcNQ3k.net] 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、 BitTorrent(Covenant)が活発な情報交換・交流コミュニティでオープンソース開発されています(プログラマー募集中) 言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか? Covenantの作者(Lyrise氏)がそういう人と話したいそうなので、よろしければツイートお願いします<(_ _)> https://twitter.com/Lyrise_al ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできない情報発信好きアスペルガーw The Covenant Project 概要 Covenantは、純粋P2Pのファイル共有ソフトです 目的 インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します 特徴 Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW) 接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です DHTにはKademlia + コネクションプールを使用します UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります) 検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません t
712 名前:デフォルトの名無しさん [2016/05/05(木) 20:47:26.30 ID:a3JwFvV1.net] 眠い時にプログラム書いてたら1つの関数の中にこれでもかと再帰を詰め込んだモンスター関数を書いてしまって訳が分からなくなる
713 名前:デフォルトの名無しさん mailto:sage [2016/05/09(月) 20:57:03.75 ID:QYIZFGji.net] アッカーマン関数はただの再帰じゃないらしいけど、 再帰のパワーを究極まで高めたら何になるの?
714 名前:デフォルトの名無しさん mailto:sage [2016/05/10(火) 14:12:08.45 ID:zxnDb8j/.net] チューリングマシンになる 証明:以下より明らか ・再帰を用いて、スタックとループをそれぞれ構築できる ・スタック2つとループを用いて、チューリングマシンを模倣できる ・故に、再帰の能力はチューリングマシン以上である。 ・一方で、チューリングマシンを用いて再帰を表現出来る ・よって、再帰はチューリングマシンと等価である。 # ツッコミ待ち
715 名前:デフォルトの名無しさん mailto:sage [2016/05/10(火) 22:44:58.13 ID:HO4tbZvB.net] 突っ込み待ちというかそんなに間違ってなくない?
716 名前:デフォルトの名無しさん mailto:sage [2016/05/11(水) 19:52:51.98 ID:+rpbSEWz.net] なんで再帰がどうこうで喧嘩してるんだこいつらw
717 名前:デフォルトの名無しさん mailto:sage [2016/05/11(水) 20:12:13.79 ID:LnJQmy5e.net] グッドスタイン数列というのがペアノ算術の限界を超えた再帰という話があるらしいのだが、詳しいことはよくわからない。 でもロマンを感じる。
718 名前:デフォルトの名無しさん [2016/05/19(木) 19:24:04.68 ID:eYV7veAj.net] 女性限定、恋愛相談サイトオープン。 4000名のイケメンカウンセラーが在籍中♪ 自己紹介動画はいつでも見放題です! メンガ って検索してください ※本当のサイト名は英字です
719 名前:デフォルトの名無しさん [2016/06/19(日) 18:09:53.79 ID:SmadYZ7Z.net] 最近再帰好きだわ
720 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 20:03:06.77 ID:d2BELKj/.net] ダジャレ?
721 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 20:41:14.58 ID:N0SKT7vZ.net] >>719 そう言う時期が俺にもあったな...(遠い目)
722 名前:デフォルトの名無しさん mailto:sage [2016/06/19(日) 21:07:57.12 ID:OFyR5xSG.net] 再帰で実装した方がスッキリするケースってなかなか出てこないから最近全く使ってないや
723 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 12:26:15.09 ID:xPaMOXBK.net] 再起なんてバグの温床だからなぁ マインスイーパー作る時ぐらいしか使わない
724 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 19:47:38.77 ID:YaidyggX.net] import Data.Function (on) import Data.List (concatMap, groupBy) main = let (f:r) = mypi 2 4 1 12 4 s = slice 5 $ slice 10 $ concatMap show r in putStrLn (show f ++ ".") >> putStr (unlines $ map unwords $ take 200 s) slice :: Int -> [a] -> [[a]] slice n ls = let q = concatMap (replicate n) [0..] :: [Int] in map (map snd) $ groupBy ((==) `on` fst) $ zip q ls mypi :: Integer -> Integer -> Integer -> Integer -> Integer -> [Integer] mypi k a b a1 b1 = let p = k * k q = 2 * k + 1 a' = a1 b' = b1 a1' = p * a + q * a1 b1' = p * b + q * b1 loop a a1 d d1 = if d == d1 then d : let a' = 10 * (a `rem` b' ) a1' = 10 * (a1 `rem` b1') in loop a' a1' (a' `quot` b') (a1' `quot` b1') else mypi (k + 1) a b' a1 b1' in loop a' a1' (a' `quot` b') (a1' `quot` b1') えんしうりつを100まんけたひょうじする
725 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 23:20:34.02 ID:Lsa8y5Hv.net] パイ焼きか? 何秒で計算できんの?
726 名前:デフォルトの名無しさん mailto:sage [2016/06/20(月) 23:52:55.90 ID:YaidyggX.net] $ time ./pi >/dev/null ./pi > /dev/null 0.40s user 0.00s system 99% cpu 0.400 total 一瞬やね(最適化 -O) ちなアルゴリズムはRubyのソースについてるやつから持ってきた
727 名前:デフォルトの名無しさん mailto:sage [2016/06/27(月) 22:23:07.70 ID:99UKpQvj.net] 深さ優先探索より幅優先探索が好きだ。 重複がある場合計算量が深さより有利だし、 メモリモリモリ積んでゴリゴリ問題を制覇する感じがたまらない。
728 名前:デフォルトの名無しさん mailto:sage [2016/06/28(火) 10:17:41.97 ID:yMD5BWvc.net] 幅優先探索の絶対見つかる感は異常
729 名前:デフォルトの名無しさん [2016/07/18(月) 23:29:48.39 ID:v2MXNS7u.net] まだ再帰一回しか使ったこと無いな。 ループでもよかった感じしたけど
730 名前:デフォルトの名無しさん mailto:sage [2016/07/26(火) 07:09:31.44 ID:HN1KCMsQ.net] >>33 iがインクリメント出来ないw
731 名前:デフォルトの名無しさん mailto:sage [2016/07/26(火) 07:11:59.49 ID:HN1KCMsQ.net] ディレクトリ掘っていく処理なら再帰の方がすっきり書ける それ以外使ったこと無いけど
732 名前:デフォルトの名無しさん mailto:sage [2016/07/26(火) 07:14:06.40 ID:HN1KCMsQ.net] Javaの例外の発生源を探すのにも使った
733 名前:デフォルトの名無しさん mailto:sage [2016/07/28(木) 22:29:51.78 ID:dH/T3UwK.net] flattenがあると再帰書かなくて済むことがまれによくある。
734 名前:デフォルトの名無しさん mailto:sage [2016/07/28(木) 23:29:35.59 ID:dH/T3UwK.net] findとかディレクトリのflattenだよね〜
735 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 09:51:23.93 ID:d/v3ZRhl.net] 再帰は楽しい
736 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 22:01:40.05 ID:v/rkDCKK.net] 超簡単なハノイの塔のコードを 理解出来ない奴らばかり 俺様ステキ 再帰は楽しい
737 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 22:19:26.10 ID:jcPMAjAY.net] ハノイの塔って最初誰が考えたんだろなw まさに再帰のための問題だよなw
738 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 02:49:55.84 ID:rhb0jFW4.net] >>737 エドゥアール・リュカ/1800年代後半
739 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 11:30:45.35 ID:ea63k9Af.net] 連分数展開って見た目的にも再帰的 あとは連平方根なんてのもあったっけ?
740 名前:デフォルトの名無しさん mailto:sage [2016/08/01(月) 17:10:15.58 ID:JXVULl1x.net] 行列式の値を余因子行列から求めるって発想が好き
741 名前:デフォルトの名無しさん mailto:sage [2016/08/14(日) 09:13:25.49 ID:Dug1tlBQ.net] 数学のように条件を書くだけで処理が書けるのは楽しい
742 名前:デフォルトの名無しさん mailto:sage [2016/08/14(日) 12:23:51.18 ID:fahh+/HO.net] >>741 では これの値を教えてください lim[n->∞]sin(πen!) わりとまじです
743 名前:デフォルトの名無しさん mailto:sage [2016/08/14(日) 12:55:12.86 ID:2ASH1YAS.net] en==円
744 名前:デフォルトの名無しさん mailto:sage [2016/08/16(火) 08:58:30.09 ID:Q5NurgQe.net] 順次反復分岐だけで超深いは凄いな
745 名前:デフォルトの名無しさん mailto:sage [2016/10/13(木) 18:45:18.08 ID:zUN0ltZm.net] >>693 これこそ C の最強な部分だ
746 名前:デフォルトの名無しさん mailto:sage [2016/10/13(木) 18:46:47.08 ID:Xwk5OgLP.net] void **hoge; のときに void *fuga = hoge; でもイケてしまうときとダメな時があるんだが良く判らん。
747 名前:デフォルトの名無しさん [2016/10/30(日) 02:58:18.76 ID:oDMcv2JQ.net] 斉木楠雄と再帰関数って似てるよな
748 名前:デフォルトの名無しさん mailto:sage [2016/10/30(日) 13:41:20.72 ID:broC4ect.net] 小町算の総当たり問題は綺麗にかけて好き
749 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 03:07:23.35 ID:gP4JS71d.net] 昔カッコつけてクラスのコンストラクトの再帰だったかループが爆発するバグを作ったことがある バックトレース大変だった思い出 フリーダムなC言語系は好きだ
750 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 09:26:24.46 ID:rGVVvSQ9.net] int main() { return main(); }
751 名前:デフォルトの名無しさん mailto:sage [2016/11/06(日) 12:42:18.20 ID:PPwxyKBf.net] >>750 なめてんの?
752 名前:デフォルトの名無しさん mailto:sage [2016/11/09(水) 21:10:33.07 ID:5TPAUZWc.net] 再帰は面白いと思ってた時期もあった気がする。 ただ引数や戻り値を順番付けて管理しておけば処理内容はループと同じなんだよね。もちろん実行資源の内訳も。 と言うより、「再帰はループの一つである」という表現のほうが正しいか
753 名前:デフォルトの名無しさん mailto:sage [2016/11/09(水) 22:24:15.76 ID:QOOLd5xM.net] ハノイの塔
754 名前:デフォルトの名無しさん mailto:sage [2016/11/10(木) 13:14:57.02 ID:17noS2hU.net] >>752 んなわけない。明らかに別物
755 名前:デフォルトの名無しさん mailto:sage [2016/11/10(木) 13:24:06.83 ID:dxAJlx69.net] ただのループでスタックオーバーフローの心配はないからなぁ
756 名前:デフォルトの名無しさん mailto:sage [2016/11/10(木) 13:27:48.38 ID:dxAJlx69.net] x 再帰はループの一つ x ループは再帰の一つ o 再帰でやりたいことはループでも実現できる o ループでやりたいことは再帰でも実現できる
757 名前:デフォルトの名無しさん mailto:sage [2016/11/10(木) 14:27:23.84 ID:hh42qZlp.net] >>755 ただのループが何を指すかが微妙だけど、 再帰を展開したようなループだとカーソル的な物が行き場を無くすとかはあるがな。 そもそもループ自体まやかしみたいなもんだよ。 cmpとjzでしかない。
758 名前:デフォルトの名無しさん mailto:sage [2016/11/10(木) 14:50:09.90 ID:dxAJlx69.net] djnz派でした
759 名前:デフォルトの名無しさん mailto:sage [2016/11/10(木) 18:03:12.84 ID:gVGtx90I.net] 再帰関数は動作の見た目(想像)が楽しい でも天才は漸化式求めて一発で計算する
760 名前:デフォルトの名無しさん mailto:sage [2016/11/10(木) 18:13:46.76 ID:hh42qZlp.net] >>758 あー、ループあるな。そういう意味では。 すまんかった。
761 名前:デフォルトの名無しさん [2016/11/10(木) 19:18:34.28 ID:bdp7hkfZ.net] 天才じゃないから再帰使うわ
762 名前:デフォルトの名無しさん mailto:sage [2016/11/10(木) 19:25:25.72 ID:Him+SRv0.net] >>755 再帰と同じようにループを実装すればオーバーフローしますけど。 >>756 実現できるのは外部仕様の話。 内部仕様の話だとこうなる。 ループを使って再帰を作ることはできる。(そもそも内部的に関数はニーモニックの段階でそう作られている)。 関数や再帰にまで抽象化 (いろいろ処理) されたものから、内部仕様としてのループを再現することはできない。 まずこうゆうときは、E(電力)あたりの最小可能処理数を考えるとわかりやすい。 あとはその処理 (抽象概念) にあなたがどのような名前をつけるか。 再帰を再帰だと思うのは、誰かが再帰に再帰という名前をつけた上、あなたもそれを再帰と思い込んだから。 実際にはループで実装されている。
763 名前:デフォルトの名無しさん mailto:sage [2016/11/10(木) 19:26:27.18 ID:Him+SRv0.net] ループって動的ループね
764 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 06:56:11.81 ID:wvSdzlse.net] >>762 > 再帰と同じようにループを実装すればオーバーフローしますけど。 意味わからん 再帰は必ずスタックを使う 単なるループはそんなもん使わない どうやってスタックオーバーフローするんだ?
765 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 07:27:43.35 ID:xeUlHUrh.net] 分からんなら分からんければいいんじゃね 先に事前に書いてあることを偉そうに質問されてもね
766 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 07:50:29.58 ID:wvSdzlse.net] 質問ってとっちゃったか w
767 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 07:54:13.90 ID:iDJmU8Gv.net] 再帰を展開したようなループ、だから そんなもん使わない、が偽か、 再起だって必ずしもスタックを使い尽くさない、が真かなんだよな。
768 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 08:11:51.46 ID:xeUlHUrh.net] スタックが必要あるからスタックが採用されるんでしょう。 ループや再帰にかかわらず。そして最適化すれば同じ記述。
769 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 09:50:34.09 ID:e7T2VXvj.net] >>767 int main(){ return main(); } 簡単です
770 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 11:06:28.50 ID:4NXZomhC.net] C言語は関数内でローカル関数を定義できないから嫌い ローカル関数でなら末尾呼び出し除去の保証とかやりやすいのに
771 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 11:08:28.85 ID:goVylNR1.net] 珍珍が再帰不能です
772 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 12:05:55.04 ID:KJb+NHX6.net] >>769 それオプティマイザ次第で、ただの無限ループになるよ。 そう言う意味じゃなくて。 せめて、cmpとjzに、いやdjnzあるじゃんみたいな話についてこようよ。
773 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 12:26:09.96 ID:Wm/OySfJ.net] >>770 C++で、クラス内に関数を定義すりゃいいだけ
774 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 13:51:46.35 ID:e7T2VXvj.net] ではstosbで
775 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 19:18:44.95 ID:KJb+NHX6.net] >>774 メモリアクセス要るようなループ書かんだろう…。ましてや再帰の展開で。
776 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 19:31:33.99 ID:F0Rj6jl1.net] >>770 なるほどね,コンパイル単位内だけで末尾再帰を保証するわけだね
777 名前:デフォルトの名無しさん mailto:sage [2016/11/11(金) 20:38:07.10 ID:7sFk++lS.net] >>770 今時のコンパイラならファイルスコープでもインライン展開とか再帰の末尾最適化ぐらい余裕でしょ
778 名前:デフォルトの名無しさん mailto:sage [2016/11/12(土) 15:29:28.13 ID:vO6QCHLM.net] コンパイラが最適化を諦めるくらい難解な処理するんだろ そのくらいのことじゃないと再帰関数する意味無いからな それか楽をしたいか、趣味か
779 名前:デフォルトの名無しさん mailto:sage [2016/11/13(日) 23:43:06.28 ID:Iqvd49JS.net] 木構造をループで辿りたいときってスタック使わずにできる?
780 名前:デフォルトの名無しさん mailto:sage [2016/11/13(日) 23:46:50.63 ID:qpRTYVIa.net] 辿るだけ(構造を保持しなくていい)ならできるでしょ たとえば全てのアドレスを出すだけとか
781 名前:デフォルトの名無しさん mailto:sage [2016/11/14(月) 09:15:00.34 ID:qrJVzCCo.net] スタックなんて "ヒト" の概念だからな。 自動で伸び縮みするような配列だって内部的にはスタックと同一なわけで一方的に増えていくかもしれない。 構造や順序をスタックせず、現在の状態だけを保持していたとしても、オーバーフローしない理由にはならない。
782 名前:デフォルトの名無しさん mailto:sage [2016/11/14(月) 10:59:32.44 ID:CNrivUWZ.net] ツリーだってメモリがツリー状になってる訳じゃない罠
783 名前:デフォルトの名無しさん mailto:sage [2016/11/15(火) 06:36:20.67 ID:HcDSv4MP.net] 質問 スタックを使わずにできるか 回答 オーバーフローしない理由にはならない 意味不明
784 名前:デフォルトの名無しさん mailto:sage [2016/11/15(火) 07:51:46.25 ID:NKQgq3zn.net] できるよ
785 名前:デフォルトの名無しさん mailto:sage [2016/11/15(火) 10:35:05.01 ID:jLBcnaY6.net] >>784 関数呼び出しどうやってするんだよ それにそんな再帰関数は好きになれないな
786 名前:デフォルトの名無しさん mailto:sage [2016/11/15(火) 10:52:21.24 ID:NKQgq3zn.net] 日本語でおk
787 名前:デフォルトの名無しさん mailto:sage [2016/11/15(火) 13:01:02.10 ID:jLBcnaY6.net] >>786 ニーハオ! モドル サキ ハ ドコニ キヲク シマスカ?
788 名前:デフォルトの名無しさん mailto:sage [2016/11/15(火) 14:10:56.00 ID:NKQgq3zn.net] >>779-782
789 名前:デフォルトの名無しさん mailto:sage [2016/11/15(火) 15:51:11.27 ID:jLBcnaY6.net] アイヤー!
790 名前:デフォルトの名無しさん mailto:sage [2016/11/15(火) 20:24:10.55 ID:vYoawJH3.net] >>779 codepad.org/Grt3NsIV detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14142251704
791 名前:デフォルトの名無しさん [2016/11/16(水) 02:58:25.42 ID:fzskfnoe.net] codepadって年はでないのか
792 名前:デフォルトの名無しさん [2016/11/16(水) 22:36:41.79 ID:1lDDb3P+.net] ヒープだろうが、スタックだろうが、メモリサイズが有限である以上、 オーバーフローは起こるわな。 馬鹿には永遠に判らんだろうけど。
793 名前:デフォルトの名無しさん [2016/11/17(木) 11:34:22.18 ID:u2Ucvcf0.net] 情報を保存しながら、進むならば、ループだっていつかオーバーフローする。 保存せずに計算できるならば、再帰でもオーバーフローしないかもしれない。
794 名前:デフォルトの名無しさん mailto:sage [2016/11/17(木) 11:37:48.10 ID:uGSslZRu.net] 誰かの口真似したのかもしれないけどそれは完全に間違ってますよ
795 名前:793 mailto:sage [2016/11/17(木) 11:44:39.48 ID:u2Ucvcf0.net] >>794 上の行? 下の行? それとも両方?
796 名前:デフォルトの名無しさん mailto:sage [2016/11/17(木) 12:42:43.08 ID:uGSslZRu.net] 下
797 名前:793 mailto:sage [2016/11/17(木) 13:03:18.99 ID:u2Ucvcf0.net] >>796 Prologですから再帰述語で関数ではありませんが、 repeat :- 割り込みあり,!. repeat :- repeat. の場合、スタックの一番上でpop,pushを繰り返すことが可能なのではないでしょうか。
798 名前:797 mailto:sage [2016/11/17(木) 13:06:35.00 ID:u2Ucvcf0.net] すみません。まちがえました。これではrepeat内でのループになってしまって Prologのrepeatになりませんでした。分かり難くなりますから割り込みを外します。 repeat. repeat :- repeat.
799 名前:793 mailto:sage [2016/11/17(木) 13:16:05.70 ID:u2Ucvcf0.net] >>797 だと、 繰り返しを最終回にするための割り込みとしたかったのですが、 実行開始の遅延を終了するための割り込みになってしまっています。
800 名前:デフォルトの名無しさん mailto:sage [2016/11/17(木) 16:59:20.16 ID:wwPqulHdC] >>790 再帰呼び出ししててワラタ。
801 名前:デフォルトの名無しさん [2016/11/21(月) 07:42:33.65 ID:Z9LRReIl.net] >>797 どういう条件だとスタックが伸びず、伸びることが不可避なのはどんな場合か。
802 名前:デフォルトの名無しさん mailto:sage [2016/11/21(月) 09:29:48.04 ID:IXIwDt6r.net] >>801 実行時、述語の最後の節で、最後の副目標(サブルーチン呼び出しにあたる)に差し掛かった時に その節のそれまでの副目標が全て決定性(別解があり得ない)に終了しているという条件で、 この節の呼び出し時点までスタックを戻って、そこに新たな再帰呼出しの情報を積むことができる。
803 名前:デフォルトの名無しさん mailto:sage [2016/11/21(月) 11:07:34.14 ID:3zR4lbui.net] >>802 条件が良すぎる・・・
804 名前:デフォルトの名無しさん mailto:sage [2016/11/21(月) 21:05:43.87 ID:vOYVrbrF.net] >>790 で完璧な回答をみせたはずだが
805 名前:デフォルトの名無しさん mailto:sage [2016/11/21(月) 22:27:59.06 ID:rblSsrUw.net] 好きか嫌いかで言ったら好きだ 趣味以外では使わないけど
806 名前:デフォルトの名無しさん mailto:sage [2016/11/21(月) 23:45:17.54 ID:7dMNwwBf.net] 当然、趣味限定だね
807 名前:デフォルトの名無しさん mailto:sage [2016/11/22(火) 08:09:17.87 ID:sAluFFeZ.net] 再帰がスタックを積むんじゃなくて関数がスタックを積むんちゃうの? スタックがなければ実現不可能な処理なら、ループで実装してもスタック積むんちゃうの?
808 名前:デフォルトの名無しさん mailto:sage [2016/11/22(火) 11:35:40.81 ID:Pvp5yOqg.net] スタックって言ってもメモリはリニアなんだぜ
809 名前:デフォルトの名無しさん mailto:sage [2016/11/22(火) 12:37:46.98 ID:flYh+8oO.net] >>807 ループで実現したときはスタックに積まれない。
810 名前:デフォルトの名無しさん mailto:sage [2016/11/22(火) 13:14:00.96 ID:XwCH+1ok.net] >>809 実行系に頼らず自分でスタックを実装するってこどだろ 使用メモリ量が不定なのは一緒
811 名前:デフォルトの名無しさん mailto:sage [2016/11/22(火) 13:44:09.96 ID:sAluFFeZ.net] スタックが摘まれないなら別物でしょう
812 名前:デフォルトの名無しさん mailto:sage [2016/11/22(火) 13:48:40.05 ID:sAluFFeZ.net] 抽象概念が実体であるかのような基準で話をする人が多すぎる 再帰でスタックが発生するならそれに対比するループも必ず同等のスタック量が発生する。 それでも 「ループで実現したらスタックは積まれない」と言うのなら、それは実現できていない。 抽象概念としての名称は便宜上再帰であるかループであるかの違いはあるが、実体としての処理は必ず同等。
813 名前:デフォルトの名無しさん mailto:sage [2016/11/22(火) 20:27:24.28 ID:dPiI/ZMV.net] >>790 で完璧な回答をみせたはずだが
814 名前:デフォルトの名無しさん mailto:sage [2016/11/26(土) 09:43:28.08 ID:cQHpTyuw.net] >>812 再帰は、入れ子状の関数呼び出しで、呼び出す関数は全部同一だから、 コードは一つで良い。しかし、関数だから呼び出す度にスタックに情報を積むし、 戻ってくるまで、積んである情報をPOPできない。 ただし、関数が末尾に有る時、則ち、戻って来た情報に対して何らかの計算をしてから 情報を返すということがない関数に関しては、戻ってきた値を直接自分の戻す値に できるわけだから、呼びだされた時の普通なら積む情報を積まずに済ませることが できるかも知れない。こういうことを「実体」というのですないか?
815 名前:813 mailto:save [2016/11/26(土) 09:45:28.00 ID:cQHpTyuw.net] すみません。最後 こういうことを「実体」というのではないか? です。
816 名前:デフォルトの名無しさん [2016/11/26(土) 12:00:32.51 ID:S9oyLAu3.net] >>814 なんでも継続 practical-scheme.net/docs/cont-j.html
817 名前:デフォルトの名無しさん mailto:sage [2016/12/10(土) 03:10:28.97 ID:bw+AbQq7.net] >>814 根本的には処理もデータも区別なく実体ってことでしょ。 ループ自体も関数自体も実体。
818 名前:デフォルトの名無しさん mailto:sage [2016/12/18(日) 21:34:26.37 ID:DsS1XQkJ.net] なあ、継続好きな人いる?
819 名前:デフォルトの名無しさん mailto:sage [2016/12/21(水) 13:12:18.95 ID:gV9REQs2.net] ああ例外出たらすぐ継続押すよ
820 名前:デフォルトの名無しさん mailto:sage [2016/12/22(木) 22:15:49.61 ID:vkr4xxpW.net] 継続は再帰ほど市民権得てないからなぁ。 継続を深く理解しているプログラマは全体の1割に満たないんだろうな。
821 名前:デフォルトの名無しさん mailto:sage [2016/12/22(木) 23:45:06.84 ID:LE7ZUwY5.net] 単純に継続を保証してる言語が少ない
822 名前:デフォルトの名無しさん mailto:sage [2017/01/03(火) 17:56:54.67 ID:bj+lJcSh.net] 物自体の実在性を議論してんのかよ やっぱ再帰って難しいわ
823 名前:デフォルトの名無しさん [2017/01/03(火) 18:36:13.80 ID:YhXp5fO+.net] 不具合っぽい hatenachips.blog34.fc2.com/blog-entry-455.html
824 名前:デフォルトの名無しさん [2017/02/11(土) 02:50:31.54 ID:JwDD7IDr.net] 私は再帰の塊のようなプログラムを作ったことがある。 DirBaseだ。 起動後のウィンドウにエクスプローラからファイルやフォルダを ドラグ&ドロップするだけで簡単にツリーができる。 DirBaseで検索すれば、ダウンロードできる。
825 名前:デフォルトの名無しさん [2017/02/11(土) 02:54:10.46 ID:JwDD7IDr.net] DirBaseのダウンロード先 www10.plala.or.jp/dir-base/
826 名前:デフォルトの名無しさん [2017/02/16(木) 15:31:02.48 ID:VWTLMYuE.net] 競プラではforループが盛んらしいが、言語開発者としては再起の方が使って欲しい ソースは俺が今朝見た夢
827 名前:デフォルトの名無しさん mailto:sage [2017/03/10(金) 23:51:10.10 ID:Ra0Xudwq.net] おまえらBrain f**kでも再帰できんの?
828 名前:デフォルトの名無しさん mailto:sage [2017/09/21(木) 16:49:36.88 ID:na02B6ss.net] >>820 ん?setjmp/longjmp のことですか?
829 名前:デフォルトの名無しさん [2017/10/03(火) 20:26:43.27 ID:GaATZUfo.net] (数値計算を主体とする)関数では使わないけど、 再帰ルーチンで使用頻度が激しいのは、外部記憶装置を含めた初期化ルーチン。 一つのルーチンで、内部記憶(主記憶装置)と外部記憶(HDD等)の出入りを管理している場合に、 初期化ルーチンで外部記憶が存在しない場合には、ルーチンで保存している定数を読みだして、外部記憶に保存する。 初期化ルーチンからの定数の読み出し・外部への保存が再起処理。 初期化ルーチン以外では使わない手法。 分割して作成すると、何年か後に見直した時に、どのように初期化しているのかわからない、という事態になることが多発したので、 初期化が必要な場合には、このような手法で同一ルーチン内に収めるようにした。 もっとも一番利用頻度の高いのは、Winでは、ダイアログボックスのプロシージャ。再起の塊で、何をしているのかわからなくなってくる。
830 名前:デフォルトの名無しさん [2018/01/28(日) 06:23:28.69 ID:GN9YKPqU.net] 再帰プログラムは関数の呼び出しで積みあがるスタックを配列とみなせば、ループアルゴリズムそのものだ。
831 名前:デフォルトの名無しさん [2018/01/28(日) 06:51:19.47 ID:GN9YKPqU.net] ファイルやフォルダ、ダイアログやウインドウは階層構造で構成されるので、再帰プログラムを使うのが一般的だ。
832 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 15:26:22.97 ID:Erw8GBm0.net] 再帰って何?って頃から普通に再帰使ってたからなあ。 自分自身を呼び出せば良いじゃんみたいな。 高校で数列とか演繹法が得意だったせいかも。 自然に使ってた。
833 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 16:28:26.35 ID:C2Jb//yt.net] 再帰云々言ってるのは大昔のFORTRANとかCOBOLを使ってた人ぐらいじゃないのかな あと組み込みとかでスタックサイズが厳しい環境で組んでるとか
834 名前:デフォルトの名無しさん mailto:sage [2018/01/28(日) 17:26:40.96 ID:OfpblgeM.net] スタックサイズが厳しい環境で再起???
835 名前:デフォルトの名無しさん [2018/01/28(日) 18:03:09.52 ID:GN9YKPqU.net] 再帰プログラムの基本はスタックにデータを入れ積み上げていく過程と、スタックからデータを取り出しスタックをクリアしていく過程の二つの動作しか基本的にない。 データを取り出したら、そのデータを使ってプログラミングされた処理を実行する。スタックはデータを貯めることと同時に処理の順番を決めている。再帰のプログラミングには二つの概念が必要だ。
836 名前:デフォルトの名無しさん mailto:sage [2018/02/12(月) 05:25:54.58 ID:P5QW/rJt.net] 再帰関数大好きですよ 美しい
837 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 11:23:42.25 ID:cixhX8OH.net] javaで再起処理書いたらガーベッジコレクションが掃除してくれるもんだと思ってたけど違うの? 十年前の記憶だから曖昧ですまない cpu使用率が100%になるけど影響ないから使ってます〜って顧客に言われたのを思い出したもんやで
838 名前:デフォルトの名無しさん mailto:sage [2018/02/23(金) 11:24:04.87 ID:cixhX8OH.net] 再帰だった
839 名前:デフォルトの名無しさん [2018/02/23(金) 12:18:58.87 ID:E8zJnigo.net] 影響ないなら気にすんな
840 名前:デフォルトの名無しさん [2018/05/23(水) 20:21:54.46 ID:Au5e7VGg.net] 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 980U0
841 名前:デフォルトの名無しさん [2018/07/05(木) 01:23:47.56 ID:RfoszcD2.net] TB1
842 名前:デフォルトの名無しさん mailto:sage [2018/08/22(水) 21:16:42.10 ID:mHU9sjBy.net] 今時スタックオーバフローぐらいでOSは死なないから大丈夫
843 名前:デフォルトの名無しさん mailto:sage [2018/08/23(木) 09:46:53.93 ID:n+qAvZtC.net] スタックオーバフローならアプリは落ちちゃう
844 名前:デフォルトの名無しさん mailto:sage [2018/08/24(金) 14:39:50.27 ID:1snHtaDM.net] 末尾再帰すればいいじゃない。
845 名前:デフォルトの名無しさん mailto:sage [2018/11/14(水) 23:02:37.97 ID:ur2RK8H0.net] 再帰アルゴリズムはなるべくライブラリで隠蔽して欲しいな。 自分で書くのはまだしも他人の再帰コードを読むのはかなり嫌。
846 名前:デフォルトの名無しさん [2018/11/15(木) 12:26:32.11 ID:yIPB3Fsn.net] 好きなんか嫌いなんかハッキリしろや
847 名前:デフォルトの名無しさん mailto:sage [2018/11/15(木) 16:20:13.76 ID:PG86imds.net] 末尾再帰は結局ただのループ
848 名前:デフォルトの名無しさん [2018/11/15(木) 16:22:56.36 ID:zCiKr9uf.net] 再帰関数と言えばアッカーマン関数とかたらい回し関数などが 有名ですが他にも何かある?
849 名前:デフォルトの名無しさん [2018/11/15(木) 21:36:15.07 ID:sS26qanx.net] 有名じゃないからwどんな入りかたしたんおまえw
850 名前:デフォルトの名無しさん [2018/11/16(金) 07:45:28.14 ID:Q+Zstbtj.net] 174 その名前は774人います (バットンキン MM5a-fW3D) 2018/11/16(金) 07:04:12.40 ID:N77Q/1ZeM >ドラゴンクエストの世界観が全く反映されていないような印象 ド ラ ゴ ン ク エ ス ト と は 何 か ? ドラゴンクエストとは何かを問い続けるのが、終わらないドラゴンクエストだろう? 違うか? 2 その名前は774人います (バットンキン MM5a-fW3D) 2018/11/16(金) 07:42:40.97 ID:N77Q/1ZeM 再帰関数を理解するにあたり先輩社員に教えていただいたのですが、その時の再帰関数の例がとてもわかりやすかったので共有させていただきます。 この例のおかげもあり、はじめは再帰関数なにそれ状態から、最後はしっかりと実装できるようになりました。再帰関数はPythonで実装しています。 https://qiita.com/jumpyoshim/items/20e6b5e70efa466699b4
851 名前:デフォルトの名無しさん [2018/11/16(金) 23:40:45.23 ID:HodhQ/sE.net] 問) 再帰的にオマンコを定義せよ
852 名前:デフォルトの名無しさん [2018/11/16(金) 23:59:40.68 ID:xavUeX/s.net] 再帰関数『終わらないドラゴンクエスト』 ドラゴンクエストとは?(){ ドラゴンクエストとは?() }
853 名前:デフォルトの名無しさん [2018/11/17(土) 00:12:17.17 ID:eQWBxdMf.net] 正直小学生のガチネタにはついていけん
854 名前:デフォルトの名無しさん [2018/11/17(土) 03:28:35.36 ID:corCuJCM.net] def DQ(n) puts "DQ #{n}" DQ(n+1) end
855 名前:デフォルトの名無しさん [2018/11/17(土) 10:42:46.80 ID:B4GISbTr.net] ({})
856 名前:デフォルトの名無しさん [2018/12/16(日) 22:50:52.23 ID:EHgXXRnO.net] バブルソート中
857 名前:デフォルトの名無しさん [2018/12/16(日) 22:56:36.33 ID:/PxsPleo.net] xn--4gq15ldsheocf87g9uc.com/
858 名前:デフォルトの名無しさん [2018/12/18(火) 11:28:45.03 ID:/M0/bFGF.net] グロ中尉
859 名前:デフォルトの名無しさん [2019/03/20(水) 19:02:56.05 ID:DvYG4dOj.net] >>1 好き嫌いの問題じゃないと思うが、理論上再起かそれと同等の内部処理履歴を残さないと実現できない処理なら、使うだろう 再起にならざるを得ない具体的な数学(科学)的な条件は忘れたが、けっこう複雑な処理じゃない限り再起じゃなくても実現できたように思う
860 名前:デフォルトの名無しさん mailto:sage [2019/03/21(木) 01:23:23.96 ID:b2sujHog.net] >>859 「再起」じゃなくて「再帰」ね スタックを使えば、つまりメモリを余分に使用することを認めれば 再帰はループに書き換えることができるから 再帰でなければ出来ないことは原理的に存在しない 更に言えば関数を受け取りまた返す高階関数があれば いわゆる不動点演算子に相当するものが書けるので 関数の再帰的定義は不要になる
861 名前:デフォルトの名無しさん mailto:sage [2019/03/21(木) 03:46:03.75 ID:v9ozWdAP.net] 論理的にはクイックソートよりマージソートが好き。 実用性はクイックソートが上なのかな?
862 名前:デフォルトの名無しさん mailto:sage [2019/03/21(木) 08:59:54.71 ID:eS2pMQJr.net] >>860 >再帰はループに書き換えることができるから そのループ再帰だよ・・・ 再帰の問題点もそのまま同等に引き継いでるよ・・・
863 名前:デフォルトの名無しさん mailto:sage [2019/03/21(木) 10:49:54.63 ID:uohid6CT.net] ループも不動点演算子も再帰関数の実装の仕方でしかない
864 名前:デフォルトの名無しさん [2019/03/22(金) 06:20:32.16 ID:t/nkQ3ne.net] リストに対してはクイックソートやマージソートより選択ソートや挿入ソートのが速かった。 ケースによって使い分けるために色んなソートがあるんだなと実感した。
865 名前:デフォルトの名無しさん [2019/03/22(金) 18:03:42.63 ID:GIrPmH5o.net] どうゆう状況でそんなことが起こるのか想像できない
866 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 20:18:00.83 ID:UnYyaz4E.net] リストってリンクリストってこと?
867 名前:デフォルトの名無しさん mailto:sage [2019/03/22(金) 23:38:43.20 ID:bs44Fjbm.net] >>862 ループと再帰とは違うよ 更に言えば高階関数があればループも再帰も必要ない 不動点演算子もループも再帰だと言うのはナンセンスだ それは「再帰と同じだ」と君が思うものを再帰と呼ぶ、と主張しているに等しい こんな君だけの主観による再帰の定義では議論にならない
868 名前:デフォルトの名無しさん mailto:sage [2019/03/23(土) 01:46:30.69 ID:05rjzlE7.net] チューリング完全なんだからどの言語でも一緒、という暴論と同程度に「ループと再帰は同じ」も暴論 コンピュータからみた話じゃなくて、プログラムを書く人にとってループと再帰が同価値なのかが問題になる 自分は、複雑でも読み溶ける再帰の方が好き。ループが複雑になると、どの変数がいつのどの値を持っているのか追いきれなくなる 再帰で同程度に複雑な処理を書くと、引数の数やら名前からすぐにヤバイ臭いがするんでそんなに腐らない
869 名前:デフォルトの名無しさん mailto:sage [2019/03/23(土) 04:14:05.11 ID:FVLL7ja7.net] 末尾再帰にすると結局for文とやってることが一緒になる
870 名前:デフォルトの名無しさん [2019/03/23(土) 04:46:27.26 ID:abrpiqJH.net] モナドな再帰(IOモナドやリスト->リストな再帰)は単純な再帰でもスタック消費しない。 繰り返しコードの単純さは再帰>末尾再帰>=ループ。
871 名前:デフォルトの名無しさん mailto:sage [2019/04/03(水) 19:48:29.75 ID:mixCZYtf.net] 非同期処理の終了を待って、次の繰り返しを行う 再帰でなければ書けない
872 名前:デフォルトの名無しさん mailto:sage [2019/04/03(水) 19:55:40.32 ID:EqbpbXJ3.net] ダウト
873 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 16:23:32.66 ID:GBwqjObH.net] >>872 非同期処理の終了はイベントやコールバックで通知されるものとする 終了を待つ同期プリミティブは存在しない Javascriptだとこれが普通で、繰り返しでは書けない
874 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 20:54:30.86 ID:1bkj1Cge.net] 納得
875 名前:デフォルトの名無しさん [2019/04/05(金) 00:21:14.27 ID:ZWKOySqx.net] async/await が JavaScript の新しい仕様として入ったのも知らんのか
876 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 12:13:43.00 ID:dQkyjbHg.net] await/asyncの仕組みを知らないと見える それ使って、繰り返しで書いてみなよ
877 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 12:38:19.58 ID:dQkyjbHg.net] やっぱ、await/asyncで出来そうな気がしてきた
878 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 00:52:53.01 ID:mONJLbhR.net] rx最強説
879 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 22:24:35.37 ID:SVQji9la.net] >>868 違うよ 柴犬にこっちは太郎でこっちは次郎だから別の犬だ、と言ってるのと同じ
880 名前:デフォルトの名無しさん [2019/06/19(水) 04:57:19.87 ID:tVNS+22r.net] 【出資】松本卓朗 人工知能詐欺【注意】 https://rio2016.5ch.net/test/read.cgi/rikei/1560859403/
881 名前:デフォルトの名無しさん [2019/06/19(水) 05:49:29.73 ID:K5sVxx6Y.net] 再帰処理は 現在の関数が戻ってゆくアドレスをスタックに保存し、このアドレスを積極的に利用する。 プログラミングの実行アドレスをスタックから取り出して制御するので、 再帰プログラミングを利用するコツは、戻りアドレスを正しく理解することだ。 再帰は同じ関数を行ったり来たりするものだが、 日常の社会では、やらない方法だ。 普通は、配列を利用して、そこに保存してあるデータを使い、 同じ場所でプログラムを実行する
882 名前:デフォルトの名無しさん mailto:sage [2019/06/19(水) 22:51:46.77 ID:cv5jOa1Y.net] ツリーたどるときくらいかな?再帰使うの
883 名前:デフォルトの名無しさん mailto:sage [2019/06/22(土) 10:20:48.19 ID:hB2G8Ayg.net] >>882 そらまあ再起が辿るイメージ図は全てツリーって名称付けれますし
884 名前:デフォルトの名無しさん mailto:sage [2019/07/31(水) 11:07:40.57 ID:w173sz60.net] ゲーム作るときになってようやく再帰の恩恵を得た めっちゃ書きやすい
885 名前:デフォルトの名無しさん mailto:sage [2019/08/01(木) 21:15:40.67 ID:C2rSdv5Y.net] >>884 ミニマックス法かアルファベータ法だろ?
886 名前:デフォルトの名無しさん mailto:sage [2020/01/03(金) 14:12:37.35 ID:EVicjzWY.net] マイコンだとスタックが1桁とかだから再帰書いた瞬間に死ぬ
887 名前:デフォルトの名無しさん mailto:sage [2020/01/04(土) 20:06:07.86 ID:q1efSz+a.net] ルネサスのRL78/G10はRAMが128Byteしかないらしいな
888 名前:デフォルトの名無しさん mailto:sage [2020/12/05(土) 18:00:57.46 ID:6KCHBqfq.net] 再帰 >>888
889 名前:デフォルトの名無しさん [2021/01/05(火) 18:41:56.91 ID:zOsm6XDhK] デキる人ほどフリーランス化する?★働き方改革 https://www.youtube.com/watch?v=ALflcwYOJtQ 年収890万円以下は社会のお荷物★騙される労働者 https://www.youtube.com/watch?v=CAp-ZrJpF54 騙されたくなかったら勉強しろ★他人のルールは損をする https://www.youtube.com/watch?v=s176O6qKuPw 底辺の99%は一生底辺★10年後が見えない同僚たち https://www.youtube.com/watch?v=4Mfiwn2sPD8 稼ぎたければ働くな★4千万円ぽっちも稼げないのはなぜ? https://www.youtube.com/watch?v=Fi7bILN4wes サラリーマン思考では儲からない理由 https://www.youtube.com/watch?v=iW6oAo0q0ZI 「頭使えよ貧乏人」に思う、寝てても金入るシステムを作る人 https://www.youtube.com/watch?v=VEB6M_s6abs
890 名前:デフォルトの名無しさん [2021/01/11(月) 13:49:06.57 ID:nJc/cTVc.net] λf . (λx . f (x x)) (λx . f (x x))
891 名前:デフォルトの名無しさん mailto:sage [2021/01/13(水) 14:49:33.89 ID:tLUt5qTN.net] ループで書くと出現する余計な変数がなくなるのが再帰のメリット
892 名前: mailto:sage [2021/01/13(水) 21:38:42.47 ID:DfoNX22P.net] >>891 ? kwsk ループ変数は再帰関数でも必要なのでは?
893 名前:デフォルトの名無しさん mailto:sage [2021/01/14(木) 06:32:41.62 ID:7/cCpBde.net] どんどんスタックにつめば確かにループ変数はいらない ただ、人間のためにループ変数はあった方かいいと思うけど
894 名前:デフォルトの名無しさん [2021/01/27(水) 21:57:40.49 ID:fE6h5Ua/.net] 再帰関数を理解したとき、最初にこれ考えたやつは天才だと思ったね 実行速度やスタック問題はともかくコードは見ていて美しい以外の何者でもない。
895 名前:デフォルトの名無しさん mailto:sage [2021/01/28(木) 02:47:34.69 ID:ggjwGOj3.net] CやUnix、オブジェクト指向なんかよりもはるかに古いんだよな 最初に実装されたのはlispかな メモリを食いすぎるのでおもちゃしか動かなかったようだが
896 名前:デフォルトの名無しさん mailto:sage [2021/01/29(金) 03:09:35.61 ID:5NtPwDh4.net] 今の時代メモリ食いすぎても動くし遅くもならないよな 1億再帰とかやったら話は別だけど
897 名前:デフォルトの名無しさん mailto:sage [2021/07/16(金) 14:24:10.16 ID:S3gddm5/.net] >>892 要らない /* n の階乗を求める */ int fact(int n) { if(n==0){ return 1; } else { return fact(n-1); } } 実質ループする処理だけど、ループの回数数えるための 変数は一切出現しない。なおかつ n は不変。
898 名前:デフォルトの名無しさん mailto:sage [2021/07/16(金) 14:26:08.03 ID:S3gddm5/.net] おお、"n*" を忘れた。こんな短い関数にバグ突っ込む俺(泣)
899 名前:デフォルトの名無しさん mailto:sage [2021/07/19(月) 22:18:11.50 ID:hlpOkuZF.net] くだらん処理にスタックを使いたくないのでわしは使わん ライブラリが殆ど無いマイナーCPUのマイナーCコンパイラでQuickSortを書いた時くらいじゃケケケ
900 名前:デフォルトの名無しさん mailto:sage [2021/07/22(木) 20:45:12.08 ID:sSLTRpJ4.net] 最近じゃオプティマイザがなるべくスタック使わないように 最適化してくれるんじゃなかったっけ?
901 名前:ハノン mailto:sage [2021/07/25(日) 23:45:12.36 ID:rUybnQpf.net] >>900 末尾再帰ならそうだと思いますが、末尾再帰でなければ無理でしょう >>898-899 は末尾再帰じゃないから最適化されにくい、というか、されない
902 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 15:46:41.87 ID:qz0ghb/n.net] >>8 ループと再帰の能力は同じです かなり古い計算論の結果です
903 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 15:52:22.08 ID:qz0ghb/n.net] >>894 ゲーデル先生
904 名前:デフォルトの名無しさん mailto:sage [2021/10/02(土) 16:12:27.49 ID:qz0ghb/n.net] >>901 結合法則を仮定していいドメインなら CPS変換を用いて最適化する手法が随分前からあります 結合法則はGPU並列化でも使われてます 浮動小数点の場合は工夫しないと誤差が変わりますが ちなみにC++ conceptの初期案でもaxiomで法則を記述出来ました
905 名前:ハノン mailto:sage [2021/10/02(土) 20:52:53.81 ID:7AkA9F3V.net] >>904 scheme の継続渡しに関係しますか? キーワードありがとうございます
906 名前:デフォルトの名無しさん mailto:sage [2021/10/04(月) 21:48:56.27 ID:tW+d3xqB.net] >>905 そう Continuation-passing style, defunctionalization, and associativity Categorical Structure of ContinuationPassing Style この辺のサンプルプログラム読んで
907 名前:デフォルトの名無しさん mailto:sage [2021/11/01(月) 12:26:41.37 ID:ZNnEkaFK.net] 履歴をとってるループが再帰
908 名前:デフォルトの名無しさん [2022/09/07(水) 22:59:05.75 ID:hj8+EGae.net] すき しかし再帰絶対書かないマンが思いの外多くて草生えるわ 末尾最適化できない再起をループに展開したって結局キューだのスタックオブジェクトでヒープ使うわけで メモリ大幅に節約できると勘違いしてる基地外とか話にならん 再帰深度がたかだか1000段とかでスタックフレームにデカいオブジェクトブチ込んだりしなきゃ 素直に再帰で組むのがいいに決まってるじゃないか 数学的演算でもしない限り業務用でスタック溢れるケースを探す方が大変
909 名前:デフォルトの名無しさん [2022/09/08(木) 09:28:47.03 ID:JEMfdspa.net] スタックとヒープは別物 共有してるアーキテクチャもあるが
910 名前:デフォルトの名無しさん mailto:sage [2022/09/08(木) 13:02:30.59 ID:o4zCWVHV.net] ループに展開できる処理をわざわざ再帰で書く奴も大概やけどな。
911 名前:デフォルトの名無しさん mailto:sage [2022/09/08(木) 15:04:24.55 ID:wt4RcFVD.net] 展開できないものあるの
912 名前:ハノン mailto:sage [2022/09/11(日) 14:15:38.74 ID:gVwBfSXr.net] >>911 二方向に再帰するもの、は展開に苦労しますね 式の評価は、再帰じゃないと書けないですね
913 名前:デフォルトの名無しさん mailto:sage [2022/09/15(木) 12:56:10.95 ID:LWNlvRIc.net] てst
914 名前:デフォルトの名無しさん [2024/01/02(火) 13:18:51.50 ID:yx0oLXiq.net] 再帰的データ構造は再帰でたどるのが楽なんだけど ループで処理したほうが途中で抜けたり処理を組み合わせやすい そこで再帰的な処理を遅延リストと組み合わせてループで処理するやり方がいまでは一般的な気がする こういうふうに C# https://paiza.io/projects/WbmxzuNdJq95o9RYTKFY_A
915 名前:デフォルトの名無しさん mailto:sage [2024/01/04(木) 11:34:09.71 ID:iR4GsMlV.net] 何が一般的なのか知らんがかなり変態的なコードだな ループでGetEnumerator呼び出したりMoveNextの戻り値を見ずCurrentを取り出したりは一般的じゃないぞ つーかバグだろそれ
916 名前:デフォルトの名無しさん mailto:sage [2024/11/23(土) 05:47:56.88 ID:dIdD47Ip.net] 将棋やオセロ、ぷよぷよなんかは再帰処理使うよね
917 名前:デフォルトの名無しさん [2024/12/08(日) 17:57:51.53 ID:EhZF4lXKz] 美しいけどね。今のコンパイラでは実行速度はどうだろ。それと、問題によっては スタックオーバーフローが起きそう。