1 :
デフォルトの名無しさん
2015/11/28(土) 18:51:38.86 ID:Rc2MJzM/
なあ、再帰関数好きな人いる?
2 :
デフォルトの名無しさん
2015/11/28(土) 18:55:04.46 ID:SbMJmhTc
わくわく
3 :
デフォルトの名無しさん
2015/11/28(土) 19:23:33.42 ID:mf/sQ31/
嫌いな奴なんて見たことない
4 :
デフォルトの名無しさん
2015/11/28(土) 19:30:25.39 ID:R0seH/nX
ループで書けるものはループで書く。
再帰使うのは仕方ない場合だけ。
5 :
デフォルトの名無しさん
2015/11/28(土) 19:53:36.58 ID:R0seH/nX
スタック的なメモリ確保が必要かどうかがループと再帰を使い分ける分岐点じゃね。
末尾再帰最適化とかは本末転倒なイメージ。
6 :
デフォルトの名無しさん
2015/11/28(土) 20:05:09.47 ID:N2qWmI2+
7 :
デフォルトの名無しさん
2015/11/28(土) 20:30:33.91 ID:Tq6BVuZs
>>5 ループ実装を隠せるのは大きいよ
抽象化はプログラミング言語の進化のベクトルと一致するからね
8 :
デフォルトの名無しさん
2015/11/28(土) 20:39:12.74 ID:R0seH/nX
ループより再帰のほうが抽象度が高いと言っている?
そこは俺にはよくわからん。
俺的にはプログラムには必要最小限の機能を使うべきで、
本質的にループより再帰のほうが強力なのだから
可能な限りループを使うべきと思ってる。
もちろん再帰をループにするためにスタックを自前で用意するといったことでは本末転倒だが。
9 :
デフォルトの名無しさん
2015/11/28(土) 20:41:49.23 ID:R0seH/nX
ツリーの巡回は再帰を使ったほうがいいだろう。
リストの巡回はループでいいんじゃね?
10 :
デフォルトの名無しさん
2015/11/28(土) 20:48:22.48 ID:Tq6BVuZs
>>8 > 俺的にはプログラムには必要最小限の機能を使うべき
そういうのはコンパイラなりインタプリタなりが頑張るべきところだと思うね
人間はより抽象化された対象を扱うようにするのがモダンなプログラミング言語の方向だし
11 :
デフォルトの名無しさん
2015/11/28(土) 20:52:46.74 ID:fFSPKhVt
抽象的なスレだな
12 :
デフォルトの名無しさん
2015/11/28(土) 20:58:39.47 ID:R0seH/nX
うーん。必要な抽象化は歓迎するが無駄な抽象化は歓迎しないというか。
この例は再帰とは関係ないけどJavaのファイル入出力なんかは
結構複雑な作りになってて無駄な抽象化なんじゃねーのとか思ってしまう。
まあ、俺個人の感想だが。
13 :
デフォルトの名無しさん
2015/11/28(土) 21:12:02.73 ID:M/Wigktg
アルゴリズムが再帰なら普通に再帰で書く
スタックサイズ制限とかあるなら別だけど
14 :
デフォルトの名無しさん
2015/11/28(土) 21:30:44.25 ID:10sD81C/
アルゴリズムが再帰であってもクイックソートなど
再帰のままじゃあ使い物にならんものがいくらでも。
15 :
デフォルトの名無しさん
2015/11/28(土) 21:32:52.35 ID:R0seH/nX
スマンw クイックソートは再帰で書くわw
16 :
デフォルトの名無しさん
2015/11/28(土) 21:34:06.03 ID:fFSPKhVt
書いたことないくせにw
17 :
デフォルトの名無しさん
2015/11/28(土) 21:52:35.40 ID:R0seH/nX
書いたことはあるけど10年以上昔の話だな。
これは拾い物だけどクイックソートなんてこれだけのことだろ。
qsort [] = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)
18 :
デフォルトの名無しさん
2015/11/28(土) 22:09:37.77 ID:fFSPKhVt
リストの巡回はループでいいんじゃないんかw
19 :
デフォルトの名無しさん
2015/11/28(土) 22:13:01.33 ID:R0seH/nX
クイックソートは単純な巡回とは違うだろ。
だからスタック的なメモリを必要とするかどうかだよ。
20 :
デフォルトの名無しさん
2015/11/28(土) 22:21:22.26 ID:fFSPKhVt
filterはリストの巡回とちゃうんかw
21 :
デフォルトの名無しさん
2015/11/28(土) 22:25:38.46 ID:R0seH/nX
filterの実装がどうなってるかまでは知らんがな。
22 :
デフォルトの名無しさん
2015/11/28(土) 22:32:42.45 ID:fFSPKhVt
知らんなら最初からそう言えやw
23 :
デフォルトの名無しさん
2015/11/28(土) 22:39:27.55 ID:R0seH/nX
なんか変なテンションだなぁ
俺がC++とかでfilter相当の関数書かにゃならんくなったらループで書くよ。
24 :
デフォルトの名無しさん
2015/11/28(土) 22:44:37.77 ID:fFSPKhVt
クイックソートはhaskellでfilterはc++なんか?
なんか変な奴だなぁニヤニヤ
25 :
デフォルトの名無しさん
2015/11/28(土) 22:49:36.42 ID:R0seH/nX
何が変か、わからん。
まあ関数型言語なんかは再帰推奨らしいがあんまり好きになれん。
26 :
デフォルトの名無しさん
2015/11/28(土) 22:59:20.81 ID:fFSPKhVt
推奨なんて生易しいもんじゃないで。
理論に囚われすぎて原理主義に陥いった餓鬼共やw
27 :
デフォルトの名無しさん
2015/11/28(土) 23:05:01.58 ID:R0seH/nX
まあ参照透過性とかは原理主義か?という気はする。
28 :
デフォルトの名無しさん
2015/11/28(土) 23:29:11.93 ID:W0C1+0hV
やっぱハノイの塔は再帰
有能
29 :
デフォルトの名無しさん
2015/11/28(土) 23:38:40.71 ID:SyBhAT0R
お遊びに使うためのものだね。
再帰なんて。
30 :
デフォルトの名無しさん
2015/11/28(土) 23:40:05.61 ID:1kauGQoG
>>8 ループでquicksort書いてみてくれ
上のコードと比較で見るだろ
言語は好きに選んでいい
31 :
デフォルトの名無しさん
2015/11/28(土) 23:45:06.21 ID:R0seH/nX
ループでクイックソート書こうとするとスタック的なものを自前で用意せにゃならんのじゃないか。
めんどくさすぎ。
32 :
デフォルトの名無しさん
2015/11/28(土) 23:51:19.94 ID:oWRhnwkW
なんかやたらと再帰がお遊びだと連呼する奴がいるが、どういう意図で言っているのか分からん。
お遊び感覚で動くものが作れるのだから、苦労しなくていい分優れているってこと?
33 :
デフォルトの名無しさん
2015/11/29(日) 00:02:43.51 ID:aMnBRPWz
>>25 関数型言語は変数再代入禁止(のものが多い)から、そもそもループは書けないんだよね
34 :
デフォルトの名無しさん
2015/11/29(日) 00:04:00.34 ID:BjpFnvXY
再帰がお遊びだ
再帰がお遊びだ
再帰がお遊びだ
>>32が可哀想だから連呼してあげたよ
35 :
デフォルトの名無しさん
2015/11/29(日) 00:06:31.94 ID:BjpFnvXY
あ、意味は「お遊び感覚で動くものを作るな」という事です。
36 :
デフォルトの名無しさん
2015/11/29(日) 00:10:17.71 ID:aMnBRPWz
動くんならいいんじゃないの?
37 :
デフォルトの名無しさん
2015/11/29(日) 00:20:09.59 ID:iZIE7tB6
ま~た関数型コンプレックスのアホが暴れてるのか
38 :
デフォルトの名無しさん
2015/11/29(日) 00:24:10.72 ID:aMnBRPWz
関数型は関数脳にならないと書けないからねー
手続き脳がしみついてると貶す対象にしかならないよね
39 :
デフォルトの名無しさん
2015/11/29(日) 00:29:56.09 ID:BjpFnvXY
お前ら俺を笑い死にさせる気かw
40 :
デフォルトの名無しさん
2015/11/29(日) 03:56:07.52 ID:1KywF+Vz
初めて知った時すごいと思いました
41 :
uy ◆Qawu9.2l1E
2015/11/29(日) 04:26:32.10 ID:RQPUWZLH
せっかく埋め立てたのに何またスレ立ててんのゴミクズ
42 :
デフォルトの名無しさん
2015/11/29(日) 06:56:51.27 ID:GeZFA4k5
ぼくたん初心者なのでわからんけど僕が今作ってる
関数から値を求める計算プログラムで再起型関数が大活躍してるお
たぶん今僕がやってる書き方が一番きれいだと思うんだけどなー
43 :
デフォルトの名無しさん
2015/11/29(日) 15:21:16.51 ID:+8PPW4GA
> たぶん今僕がやってる書き方が一番きれいだと思うんだけどなー
いろんな方法で書いてみないと比較できないんじゃね?
44 :
デフォルトの名無しさん
2015/11/29(日) 15:49:46.72 ID:BHpn4xqB
クイックソートで再帰なんてありえんと
さんざん言われ続けているのに、まだバカが湧いとるんだな。
ライブラリのループ版を使えば何の手間もかからず高速処理ができるのに
わざわざ問題ありまくりの再帰で書くなんてテロ同然の暴挙。
45 :
デフォルトの名無しさん
2015/11/29(日) 16:17:12.78 ID:1uX74bCE
46 :
デフォルトの名無しさん
2015/11/29(日) 16:52:01.83 ID:+8PPW4GA
もうソーティングの話は良いよ、仕事で使う大抵の言語ではライブラリとして用意されてるんだから。
47 :
デフォルトの名無しさん
2015/11/29(日) 17:09:26.93 ID:BHpn4xqB
>>45 再帰じゃあ、10件程度のソートに控えるという事なんだよな。
48 :
デフォルトの名無しさん
2015/11/29(日) 17:29:39.96 ID:+8PPW4GA
10件程度のソートならソーティングネットワークによるソーティングが一番速いから
十分少ない要素数に対してはそいつを呼び出して終わりだろ。
書いてないだけだろうけど。
49 :
デフォルトの名無しさん
2015/11/29(日) 20:46:37.54 ID:ILoya83o
>>9 俺の見解では、ツリートラバースに再帰を必要とするのはデータ構造に問題があると思うんだよな。
イテレータの実装を考えると再帰はちょっと無理があるんじゃないかと思う。
もちろん出来ないわけではないのだが。
ノードが子ノードを保持するような原始的なデータ構造は良くないのではないか。
50 :
デフォルトの名無しさん
2015/11/29(日) 20:56:36.78 ID:ILoya83o
代表的なツリーの一つとしてHTMLがある。
HTMLのフラグメントを切り出し、別のノードの子として加えるような操作を考えるとき、
これはやはりループに軍配が上がると思う。
もちろん、ノードに子ノードを保持するような原始的なデータ構造ではかなりメンドクサイ。
というのもHTMLの一部を切り出す時、ノードの種類によって、ノードの分割や併合が起こる。
再帰と原始的なデータ構造では非常にめんどくさい。
私はこの用途のために直列化ツリー構造というデータ構造を考案した。
(おそらくすでに一般的に使われているとは思うのだが。)
51 :
デフォルトの名無しさん
2015/11/29(日) 21:13:17.76 ID:TqJ6Jff5
ループは再帰の特別なケースに過ぎない
ループの方が無駄がなく見える事もあるだろう
だが結局はその程度の話だ
52 :
デフォルトの名無しさん
2015/11/29(日) 21:25:34.60 ID:+8PPW4GA
>>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
>>52 ちょっとそのやり方で、HTMLの一部をコピペするコード書いてみて。
54 :
デフォルトの名無しさん
2015/11/29(日) 22:12:36.39 ID:+8PPW4GA
>>53 一部ってのはどういう風に探すのん?
特定の属性を持ってるタグを探す感じ?
55 :
デフォルトの名無しさん
2015/11/29(日) 22:23:46.56 ID:euqwPPlR
どういう風に探すか後から指定できる感じで。
56 :
デフォルトの名無しさん
2015/11/29(日) 23:04:51.51 ID:ILoya83o
>>54 HTMLのコピペがいつ起こるかというと、ユーザーがその操作をした時なので、
そういう前提で設計してはどうでしょうか。
57 :
デフォルトの名無しさん
2015/11/29(日) 23:13:29.23 ID:ILoya83o
HTMLをユーザーの直観に適合する形で操作するのは意外と難しいですよ。
HTMLフラグメントの移動なんてどうですかね。
面白い題材だと思うのですが。
58 :
デフォルトの名無しさん
2015/11/29(日) 23:27:31.14 ID:euqwPPlR
直列化ツリー構造kwsk
59 :
デフォルトの名無しさん
2015/11/30(月) 00:13:02.74 ID:vNB8BIt6
60 :
デフォルトの名無しさん
2015/11/30(月) 11:10:04.73 ID:lmaKmArc
61 :
デフォルトの名無しさん
2015/11/30(月) 14:51:10.36 ID:+Ls/PK0X
>>52>>53を繰り返しで書ける人はいないみたいだね。
62 :
デフォルトの名無しさん
2015/11/30(月) 20:27:21.92 ID:lmaKmArc
そういやC++のstd::mapのイテレータとかってどうなってんるのん?
63 :
デフォルトの名無しさん
2015/11/30(月) 21:11:57.14 ID:9VRs5I4S
>>62 ノードオブジェクトに親を指すポインターもあって愚直に辿ってる。
赤黒木使ってるのが殆どだから、
レスしてる奴もコード読めない奴の方が多いんじゃないかw
64 :
デフォルトの名無しさん
2015/12/01(火) 00:02:40.17 ID:M545w8lo
赤黒木って難しいよね、結構。
65 :
デフォルトの名無しさん
2015/12/01(火) 13:24:08.38 ID:wfTLHpyu
データを吐き出す方法として前方イテレートしかしないの前提ならB+木がループでトラバース出来る上に高速なんだけど
挿入と削除を頻繁にするなら、そしてデータがキャッシュに乗り切らない程度に沢山あるなら赤黒木が高速になる
全部キャッシュに乗る程度の小さなデータ数ならAVL木が高速で
更に小さいならベクタ上にヒープ木でも作ればって話になる。
どの構造でも再帰で列挙出来るけど、ループでAVL木や赤黒木のデータを列挙するのは骨だな
66 :
uy ◆Qawu9.2l1E
2015/12/01(火) 15:00:00.16 ID:p3g6QuXB
再帰・ループの相互変換が難しいとかさあ
アルゴリズムの根本的なところ理解してないだけ
恥ずかしすぎるこのスレ
67 :
デフォルトの名無しさん
2015/12/01(火) 16:04:55.52 ID:M545w8lo
f(0,b)=b+1
f(a,0)=f(a-1,1)
f(a,b)=f(a-1,f(a,b-1))
68 :
デフォルトの名無しさん
2015/12/01(火) 16:39:12.55 ID:wfTLHpyu
>>66 >>67をループに変換するのは難しくないんだね?
ちょっとやってみせてよ。
69 :
uy ◆Qawu9.2l1E
2015/12/01(火) 17:10:17.46 ID:p3g6QuXB
rubyで書いてくれないとちょっと。
70 :
デフォルトの名無しさん
2015/12/01(火) 17:22:48.32 ID:wfTLHpyu
71 :
デフォルトの名無しさん
2015/12/01(火) 17:26:42.78 ID:alJpKlDN
再帰・ループの相互変換が難しいとかさあ
アルゴリズムの根本的なところ理解してないだけ
無能の
>>68 は、勉強しろ。
72 :
デフォルトの名無しさん
2015/12/01(火) 17:26:51.00 ID:UT6gApH3
uyって式も読めないのかな
73 :
◆tAo.kQ2STk
2015/12/01(火) 17:33:25.45 ID:wfTLHpyu
>>71 無能でーすチッスチッス
インターン先はGoogle(技術職8週間、コンパイラを改良するお仕事)でしたが何か?
今The Art of Computer Programmingの英語版の2巻読んでるんだけど
次に読むべき本は何?
>>72 数式から雰囲気掴むことも出来ない重度のアスペだから仕方ない。
74 :
デフォルトの名無しさん
2015/12/01(火) 17:39:29.54 ID:UT6gApH3
>>73 uyの残した名言
何で出来ているか?というのは愚問過ぎる
例えばそれを「uy」としましょう
「uy」から派性したAやBといった概念から「uy」を辿る事は出来る
例えばこの世界にある「オブジェクト指向」という概念や「量子ビット」といった概念から
「uy」を辿る事が可能なので、
それらで世界が出来ているといった勘違いが可能なのです
でもそれは、一体いくつ「uy」から継承がネストしていて、プログラム等でいえばメソッドが追加されてしまった純粋性のない概念なのでしょうか?
それを知っているのは「uy」だけです
この世界にあるすべての概念は「uy」へと通じているので、
料理人は料理を通じて世界を知り、スポーツ選手はスポーツを通じて世界を知ります
誰も「uy」からは逃げられないんだよ
75 :
konisi ◆tAo.kQ2STk
2015/12/01(火) 17:44:25.62 ID:wfTLHpyu
>>74 酉とIDくらい見なさいな
# どうでもいいけど最近障害者3級取ったわ
76 :
◆tAo.kQ2STk
2015/12/01(火) 17:49:32.14 ID:wfTLHpyu
あぁ、俺がuyと同一人物だと勘違いされたのではなく、
uyって人がそういう名言を残したって話か
ごめんごめん
77 :
デフォルトの名無しさん
2015/12/01(火) 18:38:14.45 ID:UT6gApH3
誰も uy なんかに価値を求めてないのにね
78 :
デフォルトの名無しさん
2015/12/01(火) 18:56:25.56 ID:wfTLHpyu
でかでかと引用した奴が言うと説得力があるね。
79 :
デフォルトの名無しさん
2015/12/01(火) 19:16:25.46 ID:UT6gApH3
んでuyちゃんのループ問題はまだ解決しないのかしら
80 :
デフォルトの名無しさん
2015/12/01(火) 19:43:22.28 ID:M545w8lo
まさにuyがアルゴリズムの根本的なところを理解しているかどうか問われているなw
81 :
デフォルトの名無しさん
2015/12/01(火) 19:54:09.54 ID:UT6gApH3
それな、今までC++スレ読んでてこいつ頭おかしいなとは思ってたけど実力が問われるよな
82 :
デフォルトの名無しさん
2015/12/01(火) 19:58:37.14 ID:wfTLHpyu
はてさてuyの実力は如何。
# 俺自身の実力はさておき。
83 :
デフォルトの名無しさん
2015/12/01(火) 20:19:08.98 ID:UT6gApH3
おせぇな uy
84 :
デフォルトの名無しさん
2015/12/01(火) 20:49:22.02 ID:M545w8lo
uy自力で頑張ってんのか?
なかなか根性あるじゃないか。
俺ならググって解答見てしまうがw
85 :
◆tAo.kQ2STk
2015/12/02(水) 00:55:46.45 ID:SG5bn8pD
再帰で書かれた超有名な関数をループにするだけの簡単なお仕事なのに
何ですぐに出来ないんだろうね?
# 全然簡単じゃないからです
86 :
デフォルトの名無しさん
2015/12/02(水) 02:08:55.48 ID:sE+ivAhG
末尾再帰に書き換えてから蓄積引数を中に押し込んでループにするんだよ。
やり方を書いたのだからきっとuyにもできるはず!
87 :
デフォルトの名無しさん
2015/12/02(水) 06:47:05.05 ID:UkYZlpUx
>>85 普通に悩んだけど再帰なら一瞬でとけんのに
ループじゃまず何のデータ構造を使っていいかわからん。
88 :
デフォルトの名無しさん
2015/12/02(水) 08:22:03.59 ID:73uUfhWJ
スタックだろ。
再帰とループ+スタックは等価。
理屈ではそうだが実際やるのは結構難しいんじゃね。
89 :
uy ◆Qawu9.2l1E
2015/12/02(水) 08:50:25.92 ID:znqtbEKc
>>70 http://ideone.com/KDSDTc 「この程度」が難しいとか言われても
は? としか思えない
再帰というのは単なるスタック付きのループであって
君たちがどこら辺で躓いているのか理解できないんです
やっぱわからない所がわからない状態なんだろうけど、
つうかSTACKUって知っていますか?
90 :
uy ◆Qawu9.2l1E
2015/12/02(水) 09:14:47.18 ID:znqtbEKc
ちなみにここ一週間のuyの生活は、朝起きて、ネトゲして朝寝る です。
ちょうどいま、起きたところではなく24時間起き続けていたので今から寝る前でした
とあるゲームであと100戦程の対戦をこなし、誰よりも速く称号を獲得しようとしてる最中です
2chのム板なんて頻繁に開いてる暇とかないし結構忙しいんですわ
91 :
デフォルトの名無しさん
2015/12/02(水) 09:18:01.80 ID:UkYZlpUx
92 :
デフォルトの名無しさん
2015/12/02(水) 09:19:02.13 ID:UkYZlpUx
自分には分からなかったわ
じゃあ質問なんだけど、再帰は全てスタック+ループで書き換えられるの?
93 :
デフォルトの名無しさん
2015/12/02(水) 09:34:55.30 ID:UkYZlpUx
連投だけど分かったかも、
再帰で帰ってくるべき値をスタックしておくってことでループ+スタック=再帰なのね
94 :
◆tAo.kQ2STk
2015/12/02(水) 09:39:29.64 ID:SG5bn8pD
>>89 問題のすり替えはいけないな。
俺は「難しくないならやってみて?」って言っただけで
そもそも「再帰のほうがループより圧倒的に簡潔に書けるよね?」って文脈だろ。
君が「難しいから出来るもんならやってみろ」って捉えたかどうかなんざ知らんがおつかれさん
うんうん、言いたいことは分かった。
それで、そのコードのどこら辺が綺麗なの?
ちなみに機械的に変換したのがこちら(rubyじゃなくてごめんよ)
https://ideone.com/XsZh4c fとhは機械的に変換したという意味では等価だし君のコードとほぼ同じ事をしてるのだけど、
h関数をパッと見て
>>69式と等しいって言うのは凄く度胸が居るよね?
>>92 そもそも再帰をどうやってソフトウェア実装してるかというとコールスタック+ジャンプ≒スタック+ループな訳で
# ちなみにスタックの正しいスペルはstack。stackuなんて子は知りませんね。
95 :
◆tAo.kQ2STk
2015/12/02(水) 09:48:27.56 ID:SG5bn8pD
s/69/67/
96 :
デフォルトの名無しさん
2015/12/02(水) 10:13:14.24 ID:amR8vvu9
97 :
デフォルトの名無しさん
2015/12/02(水) 10:15:05.34 ID:UkYZlpUx
>>96 そうなのか、、、
ならできるようにならなきゃだな
98 :
デフォルトの名無しさん
2015/12/02(水) 11:13:43.91 ID:sE+ivAhG
>>92 再帰は機械的にCPSに書き換えることで末尾再帰にできて
そうしたらそれをループに書き換えられる
両方証明されてる
99 :
◆tAo.kQ2STk
2015/12/02(水) 11:28:01.97 ID:SG5bn8pD
>>97 アセンブリ言語によくあるcall系命令の挙動を正確に言えるようになれば
どんな再帰もスタックとループで書けるようになるよ
何しろスタックとループで再帰を表現してるのがcall系命令だからね。
それをそのまま書くとこんな具合に超汚くなるけど。
https://ideone.com/0QXd8O 100 :
デフォルトの名無しさん
2015/12/02(水) 12:52:27.49 ID:UkYZlpUx
ありがとうございます
101 :
デフォルトの名無しさん
2015/12/02(水) 18:34:40.93 ID:73uUfhWJ
uyなかなかやるな。
ググって解答見た可能性もあるが、ググれるのも実力のうちだからな。
102 :
.パンティーガァル
2015/12/02(水) 20:57:19.51 ID:V8iEgN6C
>>90 > ちなみにここ一週間のuyの生活は、朝起きて、ネトゲして朝寝る です。
悲観することはない(してないかもしれないがw)
それも一つの生き方だ
人間の人生などそんなものだ
103 :
デフォルトの名無しさん
2015/12/02(水) 22:54:08.11 ID:73uUfhWJ
104 :
デフォルトの名無しさん
2015/12/03(木) 13:20:12.94 ID:lU1L6vf0
誰かループ版と再帰版でベンチマークしてみなよ
105 :
◆tAo.kQ2STk
2015/12/03(木) 13:56:10.07 ID:cYXsvyZR
106 :
デフォルトの名無しさん
2015/12/03(木) 17:06:18.36 ID:Sp77D/ez
107 :
デフォルトの名無しさん
2015/12/03(木) 17:30:30.61 ID:Sp77D/ez
>>104 ack(3,10)を100回計算させたところ
ループ 3.99秒
再帰 4.50秒
だった。微妙にループが速い。
言語はg++ 最適化あり
108 :
◆tAo.kQ2STk
2015/12/03(木) 17:54:16.46 ID:cYXsvyZR
>>106 でも115行目以降は
>>103に比べてスマートじゃない?
アッカーマン関数をより素直に表現している(ように見える)というか。
テンプレートその他がひじょーに面倒臭い事になってるのは認めるよww
109 :
デフォルトの名無しさん
2015/12/03(木) 18:28:15.45 ID:Sp77D/ez
>>108 まあそうかも。
言語によってはめちゃくちゃ簡潔に書けたりするのかな、気になる。
110 :
◆tAo.kQ2STk
2015/12/03(木) 19:58:47.04 ID:cYXsvyZR
111 :
デフォルトの名無しさん
2015/12/03(木) 20:19:17.43 ID:Sp77D/ez
>>110 だいぶスッキリした。
でも入れ子構造がなくなっちゃってるのはちょっと寂しいかな。
112 :
デフォルトの名無しさん
2015/12/03(木) 22:49:14.77 ID:Sp77D/ez
113 :
デフォルトの名無しさん
2015/12/04(金) 18:59:19.58 ID:abMxFNxB
きっしょ
114 :
デフォルトの名無しさん
2015/12/04(金) 20:33:45.20 ID:tAWNVevx
んぎもちいいいいいいいいいい
115 :
デフォルトの名無しさん
2015/12/05(土) 12:06:08.66 ID:kPO9yvRD
気持ち悪い生き物だなこいつは
116 :
デフォルトの名無しさん
2015/12/05(土) 12:08:54.94 ID:75VGJDuj
再起関数難しくて苦手だわ
117 :
デフォルトの名無しさん
2015/12/05(土) 12:38:44.60 ID:vOhmiziG
おいらも苦手だわ
118 :
デフォルトの名無しさん
2015/12/05(土) 12:50:09.98 ID:fWHJ2v3J
アッカーマンを知ったばかりで嬉しくてしょうがないんだろうな
俺くらいになるとどうでもよくなるけど
119 :
デフォルトの名無しさん
2015/12/05(土) 14:22:16.61 ID:3X0n/q/1
さぁ次は竹内関数(たらい回し関数)だ!
120 :
デフォルトの名無しさん
2015/12/05(土) 14:24:24.30 ID:FIUesRuL
>>118 アッカーマン関数が原始帰納関数でない証明を頼む。
定義がシンプルかつ一般帰納関数になるように
アッカーマンさんが構成したらしいが。
121 :
デフォルトの名無しさん
2015/12/05(土) 16:27:08.57 ID:fWHJ2v3J
その問題が解けて嬉しかったんだろうな
122 :
デフォルトの名無しさん
2015/12/05(土) 22:53:23.45 ID:Ij5oOkBB
たらいのループ化と展開の様子誰か頼む
123 :
デフォルトの名無しさん
2015/12/07(月) 01:05:16.16 ID:OW/BWl2V
なんで自分でやらない?
再帰関数が好きなんだろ?
124 :
ネトuy ◆Qawu9.2l1E
2015/12/07(月) 02:12:06.27 ID:IGEuV37f
w
125 :
デフォルトの名無しさん
2015/12/07(月) 19:27:26.73 ID:NCOmGjcr
126 :
デフォルトの名無しさん
2015/12/08(火) 10:04:03.24 ID:HiEYAt85
きも
127 :
デフォルトの名無しさん
2015/12/10(木) 22:01:50.93 ID:ZuWvmJPo
たらいのループ化どうやるかわからん。
128 :
デフォルトの名無しさん
2015/12/10(木) 23:27:19.50 ID:ZuWvmJPo
んーなんかプログラムカウンタに相当するものをスタックに積まなきゃいけない感じ?
129 :
デフォルトの名無しさん
2015/12/11(金) 02:06:03.72 ID:6gh0GR4/
130 :
デフォルトの名無しさん
2015/12/11(金) 13:42:03.51 ID:Z+QL5bbx
再帰厨はcall命令とjmp命令の違いが分かってから布教してほしい
131 :
デフォルトの名無しさん
2015/12/11(金) 18:14:40.60 ID:H0NYZxX+
>>130 何言ってるんだ。。
ループで書けば早い、自分でスタック作れば、って言ってるループキチガイに、
命令にもこういうのがあるよ、必要だからあるんだよ。
と教えてあげてはどうだ?
132 :
デフォルトの名無しさん
2015/12/11(金) 18:27:07.72 ID:FXKTAEC3
>命令にもこういうのがあるよ、必要だからあるんだよ。
だからどうしたとしか。
基地外宗教を布教するなら、自分でするんだね。
133 :
デフォルトの名無しさん
2015/12/11(金) 19:01:03.96 ID:DIOiIqvd
callとjumpの中間の命令もあるよな。
call使わない奴はいないのか?
134 :
デフォルトの名無しさん
2015/12/11(金) 19:02:56.29 ID:6gh0GR4/
中間の命令ってなんだよ?
135 :
デフォルトの名無しさん
2015/12/11(金) 19:40:32.13 ID:DIOiIqvd
>>134 MIPSのjalとjrとか。
callとretに相当。
jal相当すらなくてpcのレジスタ保存命令しかないのもあった。
136 :
デフォルトの名無しさん
2015/12/13(日) 22:44:03.31 ID:1ET048aA
ツリーのイテレータってどう書くの
誰か頼む
137 :
uy ◆Qawu9.2l1E
2015/12/14(月) 05:58:59.61 ID:0uboKikK
まずはこの手のアルゴリズム抽象化でC++使うのをやめろ
効率悪すぎ
138 :
uy ◆Qawu9.2l1E
2015/12/14(月) 06:02:04.72 ID:WJU5GahL
ツリーのイテレータっつうか
ゲームプログラミング的にいえばツリー構造のタスクシステム
ゲームプログラミングしてれば普通に書いてるような低レベルの話
139 :
◆tAo.kQ2STk
2015/12/14(月) 11:28:00.80 ID:v4oN6dOD
>>136 ツリーのイテレータの書き方は大きく分けて3種類ある。
一つ目はイテレータ自身に「どのノードを辿ってきたか」って情報を覚えさせておいてそれを用いる方法
イテレータの空間効率がO(log n)になる代わりにサクセッサの時間効率が平均でO(1)になる。
二つ目はイテレータ自身にキーを覚えさせておいて、一旦そのキーを手繰ってから次のノードを手繰り直す方法
イテレータの空間効率がO(1)になる代わりにサクセッサの時間効率がO(log n)になる。
三つ目は木構造の各葉っぱに次の葉っぱへのポインタを書いておく方法
イテレータの空間効率がO(1)、サクセッサの時間効率がO(1)になる代わりに葉要素のサイズがO(1)増える。
140 :
名無しさん@そうだ選挙に行こう
2015/12/14(月) 11:57:14.44 ID:S7hw1GZs
イテレータってそんなにたくさん使うもんじゃないし、一つ目がいいかな、俺的に。
141 :
uy ◆Qawu9.2l1E
2015/12/14(月) 15:02:59.78 ID:WIf5dtaV
それ種類じゃなくて、全部組み合わせて実装したほうが汎用的じゃねーの
class A
attr_accessor :up , :key , :list , :data
end
最低でも1と3のup listは無ければ木構造にならないだろ
君の考えは prev(up) と next(list) になってる
142 :
名無しさん@そうだ選挙に行こう
2015/12/14(月) 16:34:38.86 ID:S7hw1GZs
全部組み合わせたほうが汎用的?
何を言ってるかよくわからん
143 :
uy ◆Qawu9.2l1E
2015/12/14(月) 21:12:22.29 ID:WIf5dtaV
まず、ツリーにしたらそれはイテレータとは呼ばないから
ただのツリーを走査する為の関数に過ぎない
「イテレータ」にしか使用できないツリーじゃなくて
一通りの事に使用できるツリークラス作れば?って話
144 :
デフォルトの名無しさん
2015/12/14(月) 21:30:28.83 ID:lwFUcSQC
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 :
デフォルトの名無しさん
2015/12/14(月) 22:23:44.30 ID:S7hw1GZs
uyのイテレータの定義がさっぱりわからん。
俺はC++STLのイテレータを想像しているんだが。
uyの言ってるイテレータはなんのイテレータなんだ?
146 :
デフォルトの名無しさん
2015/12/14(月) 23:47:42.33 ID:S7hw1GZs
uyが言ってるのはツリーで実装されたイテレータということかな?
俺が言いたいのはツリーを巡回するイテレータなんだが?
147 :
デフォルトの名無しさん
2015/12/15(火) 02:12:24.45 ID:1v1TladX
コレクションを操作するのがイタレータ
148 :
uy ◆Qawu9.2l1E
2015/12/15(火) 02:28:13.41 ID:hKbS74r3
センスないと無理
149 :
デフォルトの名無しさん
2015/12/15(火) 02:42:41.61 ID:1v1TladX
>>147 それを言うなら走査だろと自分で突っ込んどく
150 :
uy ◆Qawu9.2l1E
2015/12/15(火) 02:44:41.16 ID:xpC/Gts5
例えば
[1,2,3,4] ← これをイテレートするのがイテレータだろ?
ツリーは
[1,2,[3,4,[5,6]]] ← これをイテレートしたいのが作りたいイテレータだろ?
下のはイテレータと表現するまでもなくプログラム中でツリー構造が必要になって、
「ツリークラス」ってのを定義した事あれば、そんなのは標準実装しているレベルのものだから、わざわざツリーのイテレータなんていう半端なものは誰も作らない
作る順序的にまずはイテレータのツリー化じゃなくて、ツリークラスの定義
考えが追いつかないなら好きな順序で作れば良いけど
151 :
デフォルトの名無しさん
2015/12/15(火) 07:32:58.54 ID:1zInVUKk
ツリーオブジェクトにtoArray()メソッドを用意すれば
すべて解決すると思うの。
152 :
デフォルトの名無しさん
2015/12/15(火) 10:44:59.05 ID:kfL23r5/
大富豪プログラミングだなtoArray()
ツリーなんかはサイズが非常にデカくなることがしばしばあるぞ。
153 :
デフォルトの名無しさん
2015/12/15(火) 18:13:10.16 ID:kfL23r5/
tAo.kQ2STk ってテレンスタオから取ってんの?
154 :
デフォルトの名無しさん
2015/12/15(火) 18:56:51.85 ID:kfL23r5/
>>150 汎用的なツリークラス作れって言ってんのか?
javascriptみたいになるんじゃね?
155 :
◆tAo.kQ2STk
2015/12/15(火) 19:28:58.56 ID:1tm7yObV
>>153 違うよ。人間が読める某文字列をキーにしたらその酉が作れる。
ところでさ、どうでも良いんだけど
今話題にしてるのは木構造
>>141が示したデータ構造は無向グラフ
・・・・・・だよね?
156 :
デフォルトの名無しさん
2015/12/15(火) 22:38:36.35 ID:WpFCIHcQ
ツリーじゃね
157 :
デフォルトの名無しさん
2015/12/15(火) 22:42:50.33 ID:kfL23r5/
参照が木構造になってるかグラフになってるかなんて実行時に決まることじゃないのか?
158 :
デフォルトの名無しさん
2015/12/16(水) 03:41:52.77 ID:L2apS2Qu
何だこの池沼w
159 :
デフォルトの名無しさん
2015/12/16(水) 09:38:17.31 ID:VSvjkteq
ごめん
160 :
デフォルトの名無しさん
2015/12/16(水) 21:37:56.27 ID:OpCUYLL/
いいってことよ
161 :
デフォルトの名無しさん
2015/12/17(木) 17:19:47.96 ID:Szn4FINI
162 :
デフォルトの名無しさん
2015/12/18(金) 23:27:00.37 ID:95zCi6v5
163 :
デフォルトの名無しさん
2015/12/19(土) 15:12:57.98 ID:iG82T79N
164 :
デフォルトの名無しさん
2015/12/19(土) 16:17:36.19 ID:qhiLE2sk
制御では、実行時間が読めないアルゴリズムは使いにくい。
165 :
デフォルトの名無しさん
2015/12/19(土) 16:48:17.67 ID:mZAnd63z
再帰と繰り返しは相互に変換可能なんだから、再帰で実行時間が読めないならば、繰り返しでも読めない。
こんなじょうしきも知らないの?
166 :
デフォルトの名無しさん
2015/12/19(土) 20:02:11.53 ID:owy4KRbC
ごめん
167 :
デフォルトの名無しさん
2015/12/19(土) 20:16:05.69 ID:hx9j/3Ds
再帰はシステムダウンの危険がある。
処理速度もはるかに遅くなる。
再帰の場合には、こうした実行時間が読めない特有の問題点がある。
168 :
デフォルトの名無しさん
2015/12/19(土) 22:02:48.92 ID:EjHtX5K0
> 再帰はシステムダウンの危険がある。
そう言う環境ならば、システムダウンの可能性は繰り返しでもある。
> 処理速度もはるかに遅くなる。
ヘボが作った繰り返しは再帰よりはるかに遅い。
169 :
デフォルトの名無しさん
2015/12/19(土) 22:20:57.65 ID:ZeO9ImyW
170 :
デフォルトの名無しさん
2015/12/19(土) 22:22:37.57 ID:EjHtX5K0
171 :
デフォルトの名無しさん
2015/12/19(土) 23:26:42.72 ID:25MZJC6Y
末尾再帰に対応した言語が少ないからなぁ
172 :
デフォルトの名無しさん
2015/12/19(土) 23:29:13.06 ID:srVmyYNw
普通の言語は対応してる
変な言語は使うもんじゃない
173 :
uy ◆Qawu9.2l1E
2015/12/20(日) 01:30:16.73 ID:cCXQYS6+
# 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 :
デフォルトの名無しさん
2015/12/20(日) 01:48:28.93 ID:XCzWC+ME
175 :
デフォルトの名無しさん
2015/12/20(日) 12:14:12.80 ID:8RLYRFXT
176 :
デフォルトの名無しさん
2015/12/20(日) 12:15:13.29 ID:37nsyMmy
それは、無限再帰
177 :
デフォルトの名無しさん
2015/12/20(日) 14:49:43.30 ID:zNzoBoA2
ID:EjHtX5K0のような白痴ばかりだから
再帰厨だと馬鹿にされることになる。
再帰を愛して使うんだったら、
ループ版にはない深刻なデメリットがある事ぐらいちゃんと注意した上で、
効率や安全性を無視したプログラミングを楽しむべき。
178 :
デフォルトの名無しさん
2015/12/20(日) 17:18:50.85 ID:37nsyMmy
繰り返しの唯一の利点は回数の制御が再帰よりも容易であること。
これ以外の利点はない。
バカにはそれが理解できないらしいが。
179 :
デフォルトの名無しさん
2015/12/20(日) 17:26:49.52 ID:8RLYRFXT
馬鹿には出来ませんね
180 :
デフォルトの名無しさん
2015/12/20(日) 18:23:24.49 ID:/qKlyz5E
ごめん
181 :
デフォルトの名無しさん
2015/12/20(日) 19:26:33.84 ID:37nsyMmy
再帰はID:zNzoBoA2のように低知能には理解不能という弱点があるけど
ID:zNzoBoA2のような低知能の出現率は低いので全然問題無い
むしろ低知能者を検出試験としてのメリットの方が大きい
182 :
デフォルトの名無しさん
2015/12/20(日) 22:01:31.82 ID:ywvYIxL3
再帰苦手だから何でもかんでもループ使ってすまん
183 :
デフォルトの名無しさん
2015/12/20(日) 22:05:01.79 ID:A/4Tj+iv
flattenとか難しいよね
184 :
デフォルトの名無しさん
2015/12/20(日) 22:51:10.83 ID:zNzoBoA2
もし再帰が理解出来たつもりなら、ちゃんとループに直せるぐらいのプログラミング技術は備えなくちゃ。
最低でもそれくらいの技術や知能が無ければ
再帰を楽しむことはできないよ。
185 :
デフォルトの名無しさん
2015/12/21(月) 02:17:48.47 ID:EKnooMo4
「再帰には深刻なデメリットがある」キリッ
なんて発言する低知能人は再帰を理解してるはずが無い、理解不能なものを怖れている。未開人と同じ。
186 :
デフォルトの名無しさん
2015/12/21(月) 09:54:25.69 ID:S8kWm1db
ループを恐れるのは、ループにするだけの知識・経験を欠いているから。
その程度じゃあプログラミングの世界からすぐに消えるだけの存在。
再帰厨は、現実で満たされないのでスレで妄想を垂れ流すことしかできないクズ。
187 :
デフォルトの名無しさん
2015/12/21(月) 10:52:48.60 ID:zel3cCjW
関数内にjmpも好き勝手にやるタイプだからどうとも言わんけど、
再帰否定派はまさか単一のアーキテクチャの話してないよな?
アルゴリズムとして再帰がイケてないって話だよな?
188 :
デフォルトの名無しさん
2015/12/21(月) 14:23:04.48 ID:MyhUNItP
そうなのか?
189 :
デフォルトの名無しさん
2015/12/21(月) 14:51:29.83 ID:EKnooMo4
>>186 必死で再帰を否定しているバカを弄っているだけで、繰り返しを否定しているわけでは無い
やっぱり低知能なんだな。
190 :
デフォルトの名無しさん
2015/12/21(月) 18:43:17.30 ID:u4st+H+L
みなさん、これが「弄ってるって言いたいバカ」ですw
191 :
デフォルトの名無しさん
2015/12/22(火) 08:48:59.73 ID:kujr6tD9
迷信を信じ込んで再帰を否定してるバカが
深刻なデメリット(爆笑)、例えば
> 処理速度もはるかに遅くなる。
を、実証すればスレ終了するのに。
192 :
デフォルトの名無しさん
2015/12/22(火) 11:16:51.41 ID:4uBr+2Cy
>>191 そういう超基本的なプログラミング知識が無いのに
なんでプログラム板にいるの?
そもそもプログラミング経験無いだろ、お前。
193 :
◆tAo.kQ2STk
2015/12/22(火) 12:54:32.04 ID:S5fGjlFA
異様に伸びてると思ったら深刻な問題祭りかい
いくらでも例外は挙げられるけど
再帰で書こうがループで書こうが計算時間や空間計算量はそんなに変わらんから
書きやすく、読みやすい方で書いたほうが良いんじゃない?
そんなに変わらないって言うのは十分大きな入力に対して精々2〜3倍以下に納まるって意味だからね。
1時間掛かる処理を20マイクロ秒速くする為にごちゃごちゃ書き換えるのは結構な事だけど。
194 :
デフォルトの名無しさん
2015/12/22(火) 14:08:14.84 ID:dkSLpih8
はるかと言っても所詮定数倍でしょ。
しかも一桁違うケースは
関数呼び出しがやや高価なスクリプト系の言語でもほとんどないでしょ。
195 :
デフォルトの名無しさん
2015/12/22(火) 17:31:14.37 ID:qPz15M1W
>>193 いやね,絶対的に再帰でないと書けない,いや非常に書きにくいものはあるのは確かで.
たとえば代数式の解析を非再帰的で記述しろといわれると「はたして出来るのか??」と逡巡してしまう.
こういう話題があまり発展しないのはどうしたわけですかね
関係ないけどquick-sort を三項演算子とコンマ演算子で書く話題,誰か‥私は挫折した‥
196 :
uy ◆Qawu9.2l1E
2015/12/22(火) 18:25:40.50 ID:/7VurpfC
再帰の深刻なデメリットと言えば、コンパイラ設計者が甘えてる事によってバグを触ったり
異常に速度遅くなるパターンが放置されてたりする事
なんの言語とは言わないけど
197 :
デフォルトの名無しさん
2015/12/22(火) 19:03:19.84 ID:8Du/ashj
それは再帰のデメリットではなくそういうクソコンパイラしかない言語のデメリット
198 :
デフォルトの名無しさん
2015/12/22(火) 22:57:38.64 ID:kujr6tD9
>>192 能書きはいいからとっとと実証しろ。超基本的な知識なんだろ。
「はるかに遅い」とか言ってるバカ仲間のサイトでも良いぞ。
199 :
uy ◆Qawu9.2l1E
2015/12/22(火) 23:43:59.28 ID:qcwFiUkP
>>197 なんか食パン裏返してこっちが表だとか必死に言ってるようなレスだな
200 :
デフォルトの名無しさん
2015/12/22(火) 23:48:59.13 ID:8Du/ashj
201 :
デフォルトの名無しさん
2015/12/22(火) 23:51:52.68 ID:2TsBrERG
>>198 へい。再帰が130倍時間がかかるエビデンス。
202 :
デフォルトの名無しさん
2015/12/23(水) 01:07:26.60 ID:xKy7nhKt
食パンの裏はどっち側だよ
203 :
デフォルトの名無しさん
2015/12/23(水) 01:25:49.85 ID:zjRNfIWb
>>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
>>203 たしかにおもしろい。
再帰の深さに比例して時間がかかる。
再帰が深くなると処理に時間がかかるようになるのか、
別の時間を測ってしまっているのか。わからん。これはわからん。
205 :
デフォルトの名無しさん
2015/12/23(水) 07:21:41.71 ID:fM9ORKUP
>>201 必死で再帰否定してるバカは知能が低いというエビデンス乙
シェル関数は呼び出しのたびに名前解決するのでペナルティが大きい
206 :
デフォルトの名無しさん
2015/12/23(水) 07:28:38.71 ID:fM9ORKUP
Cの場合は入った時にフレーム作成と出る時にフレーム復元
c86なら、レジスタ操作4ステップ(複合命令なら2ステップ)だ。
名前解決なんかリンク時に終わってる。
207 :
デフォルトの名無しさん
2015/12/23(水) 08:47:35.90 ID:2F8TsTF+
最近の関数呼び出しは引数をスタックに積まずにレジスタ渡しみたいだから
再帰で何段ネストしちゃっててもレジスタに収まってる限りは爆速なんじゃね
208 :
デフォルトの名無しさん
2015/12/23(水) 08:59:40.61 ID:r+tlUph/
名前解決まで計算時間に含めるなら
もう再帰云々じゃなくて長大な再帰なしの一つの関数で全部こなせって話になるんだがな
>>207 いや、そうはならない。
レジスタの退避が必要になるから、自己再帰するならどっちにしても同じだけpush/popは必要になる。
最適化が掛かったらその限りじゃないけど。
209 :
デフォルトの名無しさん
2015/12/23(水) 09:02:09.80 ID:QhR+qVh6
>>205 呼び出しだけじゃなく参照もね、iの。
localでもスタックフレームなめてるのかな?
210 :
デフォルトの名無しさん
2015/12/23(水) 09:10:56.81 ID:2F8TsTF+
>レジスタの退避が必要になるから
そうかなー
211 :
デフォルトの名無しさん
2015/12/23(水) 09:15:53.17 ID:fM9ORKUP
>>209 スタッフフレームは再帰に必要なステップだから、再帰のペナルティとしてあえて受け入れた。
シェルスクリプトを持ち出した時点で「スタックは容量制限が厳しい(場合もある)リソース」
を自分で否定しちゃうところが再帰否定してるバカが低知能であるもう一つのエビデンス(笑)
(場合もある)を知らないのか、教わってないのか知らないが、全ての場合だと思い込んでるところもバカの、特徴だね。
212 :
デフォルトの名無しさん
2015/12/23(水) 09:50:24.66 ID:r+tlUph/
213 :
デフォルトの名無しさん
2015/12/23(水) 11:20:43.15 ID:2F8TsTF+
対比先もレジスタにすればいいのにね
214 :
デフォルトの名無しさん
2015/12/23(水) 11:25:42.60 ID:r+tlUph/
そんな事をすると
既に退避させてある値を別なレジスタに退避させてから、退避させたい値を退避するコードを吐く羽目になるけど
レジスタが最低でも加算無限個無いと出来ないからね。仕方ないね。
215 :
デフォルトの名無しさん
2015/12/23(水) 11:53:11.24 ID:/Snk+v/P
externしていないstatic関数とかならレジスタ渡しもふつうにある。
もちろんCランタイム・コンパイラによる
216 :
デフォルトの名無しさん
2015/12/23(水) 12:07:45.20 ID:r+tlUph/
217 :
デフォルトの名無しさん
2015/12/23(水) 12:46:44.21 ID:2bKYe5U2
>>204 bashはダイナミックスコープだから再帰の深いところでは
変数の参照に時間がかかるのかな。いまはその辺を疑ってる。
218 :
uy ◆Qawu9.2l1E
2015/12/23(水) 13:07:16.81 ID:cGrC7qed
219 :
デフォルトの名無しさん
2015/12/23(水) 16:35:42.36 ID:u0B3Sjd8
だいたい再帰で問題が無いなんて
クイックソートで再帰が役に立たない事すら知らないってことか?
処理件数が増えたら速度の差なんて、何万倍どころじゃないし。
220 :
デフォルトの名無しさん
2015/12/23(水) 16:37:36.04 ID:xKy7nhKt
221 :
uy ◆Qawu9.2l1E
2015/12/23(水) 16:45:18.40 ID:uhnrlQdn
>>219 ファーwwwwwwwwwwwwwwwwwwwwwwwwwww
222 :
デフォルトの名無しさん
2015/12/23(水) 17:05:56.20 ID:fM9ORKUP
223 :
デフォルトの名無しさん
2015/12/23(水) 17:15:03.86 ID:2bKYe5U2
>>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
>>223 10000倍高速化の比較対象はそれでも良いぞ。
225 :
デフォルトの名無しさん
2015/12/23(水) 17:56:16.45 ID:ZCUCTd42
一万倍とかwwww
どこをどうやったら一万倍差がつくんだ
226 :
デフォルトの名無しさん
2015/12/23(水) 18:11:01.01 ID:2bKYe5U2
>>225 クイックソートの最悪の時間計算量はn^2なので
データによってはとても大変なんよ。
227 :
uy ◆Qawu9.2l1E
2015/12/23(水) 18:27:35.24 ID:PjxVSF2U
アルゴリズムの抽象化に静的言語使うチンパンとか話にならないから(´・ω・`)
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
>>225 最低10000倍ね。笑
>>219 >処理件数が増えたら速度の差なんて、何万倍どころじゃないし。
あ、小学生のように0.0001万倍とか言い逃れるかも。爆笑
229 :
デフォルトの名無しさん
2015/12/23(水) 21:36:40.93 ID:L95mHKNc
230 :
デフォルトの名無しさん
2015/12/23(水) 21:47:18.77 ID:ZCUCTd42
万倍高速化はよwww
231 :
デフォルトの名無しさん
2015/12/23(水) 22:10:25.42 ID:fM9ORKUP
ID:u0B3Sjd8
10000倍の高速化まだ? 常識的で簡単そうな口ぶりだったけど。
232 :
デフォルトの名無しさん
2015/12/23(水) 22:12:02.95 ID:fM9ORKUP
万は間違いだったとしても、最低でも倍速は楽勝なんだろ。
233 :
デフォルトの名無しさん
2015/12/23(水) 22:29:26.28 ID:zjRNfIWb
>>232 速度以前に
>>223 は簡単にスタックオーバーフローするよ。
それを防ぐ方法を教えてやってよ。
234 :
デフォルトの名無しさん
2015/12/23(水) 22:33:54.64 ID:QhR+qVh6
>>233 繰り返し版が明示的スタックに使うヒープと同サイズに
マシンスタックの上限を変更すればOK
235 :
デフォルトの名無しさん
2015/12/23(水) 22:55:30.83 ID:zjRNfIWb
いや、君に言ったわけじゃないし、最適化を教えてやれってことなんだけど。
236 :
デフォルトの名無しさん
2015/12/23(水) 23:35:43.46 ID:fM9ORKUP
>>233 バカなの?
>>222読めないの?
10000倍の高速化まってんだから、くだらねー横槍入れないように。
お前が10000万倍高速化するならかまってやんよ。
237 :
デフォルトの名無しさん
2015/12/23(水) 23:43:11.94 ID:QhR+qVh6
>>226 繰り返しか再帰かに関係ないがな。
pivotの選び方次第だろ。
それは明示的にスタック使う繰り返し版クイックソートでも同じ。
238 :
デフォルトの名無しさん
2015/12/23(水) 23:58:42.12 ID:2bKYe5U2
239 :
デフォルトの名無しさん
2015/12/24(木) 01:02:26.01 ID:aanAAc0G
240 :
デフォルトの名無しさん
2015/12/24(木) 01:08:56.14 ID:VDgCwlJn
241 :
デフォルトの名無しさん
2015/12/24(木) 06:51:58.79 ID:2ShnOfV/
>>240 最悪パターンでもよいから、10000倍高速化しろよ。
242 :
uy ◆Qawu9.2l1E
2015/12/24(木) 08:02:14.94 ID:Ecjqx/Av
スキルない人間をいくら叩いても何も出てこないのに
ここは動物園かよ
243 :
デフォルトの名無しさん
2015/12/24(木) 08:55:59.49 ID:Q6U3kr4L
黒魔術師は再帰関数が大好き
244 :
デフォルトの名無しさん
2015/12/24(木) 09:09:51.37 ID:Zs2o0pyD
黒魔術師はマクロを生成するマクロも大好き
245 :
デフォルトの名無しさん
2015/12/24(木) 11:57:48.07 ID:2ShnOfV/
再帰を必死に否定しているバカの主張
1 スタックが制限の厳しいリソースである環境が全てだと思い込み、再帰の致命的なペナルティだと主張する
2 シェル関数呼び出しをエビデンスとして、再帰が130倍遅いと主張する
3 再帰版のqsortは数万倍遅いと主張するが、数万倍速いはずの非再帰版を示さない
4 知能が低く再帰を理解できない。それをもって再帰は難解と主張する。
246 :
デフォルトの名無しさん
2015/12/24(木) 14:54:05.30 ID:QIUsopJK
>>245 そうやって執拗に絡むのもはっきりいって馬鹿丸出しだよ。
せっかく相手がクイックソートのコードを書いてくれたんだから
そのコードの問題点を指摘する方が賢そうに見えると思ったんだけどね。
247 :
デフォルトの名無しさん
2015/12/24(木) 16:38:25.55 ID:2ShnOfV/
>>246 さらなる意味不明なバカが出てきたな。
コード出したのは再帰を必死で否定してるバカじゃないぞ。
248 :
デフォルトの名無しさん
2015/12/24(木) 17:26:51.73 ID:ri4CJahT
最初期は再帰をサポートしてなかった計算言語があるらしい
249 :
デフォルトの名無しさん
2015/12/24(木) 18:44:44.88 ID:W/SZtGXt
今はハードウェアレベルで再帰が実装されてるからな。
それを思えばいかに再帰が本質的にプログラミングに必要とされてるかってことだな。
250 :
デフォルトの名無しさん
2015/12/24(木) 20:04:26.21 ID:aanAAc0G
計算可能性を探求する試みにおいて最初に出たのが、
エルブラン・ゲーデルの一般帰納関数だからね。
次がラムダ計算。
その次がノイマン型計算機直系の先祖であるチューリングマシン。
251 :
デフォルトの名無しさん
2015/12/24(木) 20:37:54.33 ID:Hny3MC9I
10000倍だっておとなしいぐらい。
再帰だと落ちまくるから∞倍だって当たり前だろ。
252 :
デフォルトの名無しさん
2015/12/24(木) 20:46:14.21 ID:W/SZtGXt
メモリ足りないなら動かないのは再帰もループも変わらんだろ。
ループのほうが本質的にメモリ使用量少なくなるとかなら話は変わってくるが。
253 :
デフォルトの名無しさん
2015/12/24(木) 20:58:31.47 ID:2ShnOfV/
これだね。本当に知能が低い。
> 1 スタックが制限の厳しいリソースである環境が全てだと思い込み、再帰の致命的なペナルティだと主張する
254 :
デフォルトの名無しさん
2015/12/25(金) 18:57:10.38 ID:IqCVGu/8
>再帰もループも変わらんだろ。
なんで試してみないんだ?
再帰とループでクイックソート
ループ方式なら、データが何千万件あろうと無問題
255 :
デフォルトの名無しさん
2015/12/25(金) 19:44:32.39 ID:TZMq+uAI
256 :
uy ◆Qawu9.2l1E
2015/12/26(土) 05:53:41.97 ID:QzXIU7/C
覚えたての知識を使ってレスバトルするだけのスレなんていらねーから
257 :
デフォルトの名無しさん
2015/12/26(土) 08:33:15.25 ID:oIXuKyHb
いらないスレを使って自分の意見を垂れ流すとか有効活用乙としか
258 :
デフォルトの名無しさん
2015/12/26(土) 10:19:35.68 ID:EXUTS9i+
そういう初心者の遊び場もあっていいと思うけどなあ
259 :
デフォルトの名無しさん
2015/12/26(土) 12:54:13.38 ID:KD7gR2Cz
>>252 再帰の方は、関数呼び出し大量に発生するから、リターンアドレス待避とレジスタ待避に、メモリーが喰われる。
260 :
デフォルトの名無しさん
2015/12/26(土) 13:36:54.41 ID:oIXuKyHb
>>259 ループの方は今どの範囲についてソートしているのかという情報が大量に発生するから同じ議論が成り立つ訳だが。
261 :
デフォルトの名無しさん
2015/12/26(土) 13:40:32.70 ID:6n5NtJkM
>>260 ループはヒープ、再帰はスタック
つまり、ヒープとスタックがぼくらを助けてくれるんだ!
262 :
sage
2015/12/26(土) 15:02:23.21 ID:Igcba1qr
>>254 >>222(再帰版qsort)で5000万件ソートしてみた。楽勝で終了する。
必死で再帰を否定しているバカが低知能だという事がまた証明されてしまった。
頭が悪いって本当にかわいそう。
263 :
デフォルトの名無しさん
2015/12/26(土) 16:45:09.37 ID:YV12MLKo
>>262 再帰版でうまくいくのだったら非再帰版ではもっとうまくいく,という発想はないのかね?
264 :
デフォルトの名無しさん
2015/12/26(土) 16:59:02.38 ID:oIXuKyHb
>>263 うまくいくって言ったって高々定数倍速くなるだけだろ?
非再帰版を書いたり保守したりするコストより新しい速いマシンを買ったほうが安く上がるって発想は無いのかね?
265 :
デフォルトの名無しさん
2015/12/26(土) 17:27:47.02 ID:Igcba1qr
>>263 知能障害者って本当にかわいそう。
5000万件でソート出来てるってことは、「再帰はスタックあふれる」という迷信が嘘だという発想には至らないのかね。
クイックソートの深さの制御はすでに研究し尽くされてて、全然問題ないんだよ。
266 :
デフォルトの名無しさん
2015/12/26(土) 17:37:15.54 ID:Igcba1qr
あっ、繰り返し版は10000倍速いんだっけ? (爆笑)
早く実装コードみたいなあ。
267 :
デフォルトの名無しさん
2015/12/26(土) 18:11:47.33 ID:6n5NtJkM
>>266 そんなに実装したいのなら教えてしんぜよう。
5000万件で
>>201 を実行してみたまえ。
再帰呼出しというのは効率が悪いとても頭の悪いやり方なんだよ。
268 :
デフォルトの名無しさん
2015/12/26(土) 18:13:42.40 ID:EXUTS9i+
シェルスクリプトを証拠として使うのは笑ってしまうからやめろ
269 :
デフォルトの名無しさん
2015/12/26(土) 18:16:50.75 ID:6n5NtJkM
>>268 反論できないのな?じゃあお前の負けってことで。
270 :
デフォルトの名無しさん
2015/12/26(土) 18:22:25.08 ID:EXUTS9i+
野次飛ばしてる観客相手に勝利宣言も笑うからやめろ
おまえはプロレスのヒール役か
271 :
デフォルトの名無しさん
2015/12/26(土) 18:26:32.21 ID:gy7QXsCA
>高々定数倍
そんな安全なもんじゃあねぇ。
データが増えれば差も増大。
272 :
デフォルトの名無しさん
2015/12/26(土) 18:38:59.41 ID:Igcba1qr
273 :
デフォルトの名無しさん
2015/12/26(土) 18:41:57.44 ID:Igcba1qr
>>271 ミジメすぎるぞ。クイックソートのスタック消費量はlog nに抑える事が可能。
こんな基本的な事を知らないから数千万件はソート出来ない。キリッ
とか、赤面な発言しちゃうんだよ。
274 :
デフォルトの名無しさん
2015/12/26(土) 18:47:36.31 ID:Igcba1qr
ちなみに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
>>272 バカかお前は。ボウフラサイズの脳ミソしか搭載してないのか?
ただの繰り返しでさえ130倍の差があるのだから
クイックソートを実装したらそれ以上の開きがあるのは自明だろうが。
276 :
デフォルトの名無しさん
2015/12/26(土) 19:08:33.46 ID:YV12MLKo
277 :
デフォルトの名無しさん
2015/12/26(土) 19:09:07.52 ID:oIXuKyHb
>>275 バカはお前だ。シェルスクリプトでクイックソートを実装するなんて誰がするか。
sortプログラムを使え。
ちなみにシェルスクリプトの場合、関数呼び出しはそれ自体がスタックの深さをnとしてO(n^2)くらいの計算時間を持つっぽい。
278 :
デフォルトの名無しさん
2015/12/26(土) 19:09:41.46 ID:Igcba1qr
>>275 ぷぷぷ。知能障害は本当にかわいそう。
qsortの繰り返し版は関数呼び出しの代わりに自前でスタック管理しなきゃならないんだよ。
10000倍高速化の実証コードはよ。
279 :
デフォルトの名無しさん
2015/12/26(土) 19:10:23.62 ID:oIXuKyHb
>>276 確かに、うん、確かに、非常にゆるやかに発散するね。
n=2^64としてもlog nは64だけどね。
定数と変わんないレベルだよね。
280 :
デフォルトの名無しさん
2015/12/26(土) 19:11:25.60 ID:6n5NtJkM
>>277 実装できないのな?無理なのな?はい論破。
281 :
デフォルトの名無しさん
2015/12/26(土) 19:14:27.33 ID:6n5NtJkM
>>278 >>201 がすべてを物語っている。
これが何よりの証拠。再帰がとてつもなく効率が悪いことを
つまびらかにしてみせた。ここに来て見てみぬふりは通用しない。
エビデンスもきちんと示されている。もはや知らぬ存ぜぬでは済まされない。
282 :
デフォルトの名無しさん
2015/12/26(土) 19:14:30.05 ID:Igcba1qr
>>280 何万倍も高速だっ。キリッ。
って主張してる奴に実証責任があるんだが
ガイジにはわからないの?
283 :
デフォルトの名無しさん
2015/12/26(土) 19:16:21.04 ID:oIXuKyHb
>>280 練習のためなら兎も角、シェルスクリプト「だけ」でソーティングなんてやる意味が無い。
ループだろうと再帰だろうとね。
理由は遅いから。
ループで組んだとしても、非常に遅いから、実装するだけの意味が無い。
sortを呼べばCで書かれた非常に高速でスケーラブルなソーティングが出来るから、普通はそっちを使う。
さぁ君は一体何を論破したというのだい?
284 :
デフォルトの名無しさん
2015/12/26(土) 19:16:31.66 ID:Igcba1qr
>>281 障害児くん
10000倍と130倍って、どっちがどれだけ大きいかわかる?
285 :
デフォルトの名無しさん
2015/12/26(土) 19:17:31.65 ID:6n5NtJkM
>>282 >>201 で完全に証明してみせた。
反証する責任がお前にあるとは俺は思わないよ。
俺は自分の都合の良いように他人に責任を押し付けるなんて
卑劣な真似はできない。俺はただの真実の探求者。
286 :
デフォルトの名無しさん
2015/12/26(土) 19:21:05.64 ID:oIXuKyHb
>>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
>>284 ボウフラ並みの脳ミソをメダカにでも食われたのかお前。
頭悪いにも程があるだろうが。こんな鶏頭野郎の
相手する俺の身にもなれ。なんていいやつなんだ俺。
聖人君子としか言いようがないわ。
>>201 は5000回の繰り返しだ。
5000回の繰り返しでさえ130倍の開きがあるのだから回数が
増えれば差は開く一方だ。だから、
>>267 で5000万と言ったのだよ。
288 :
デフォルトの名無しさん
2015/12/26(土) 19:23:23.36 ID:PvF8tuZ2
霊がいるのかいないのかは判りませんが
人間の目が無いものを見ることがあるのは事実です
289 :
デフォルトの名無しさん
2015/12/26(土) 19:23:40.75 ID:EXUTS9i+
差は開くだろうけど比も開くのか?
290 :
デフォルトの名無しさん
2015/12/26(土) 19:23:44.50 ID:oIXuKyHb
>>287 5000回の再帰で130倍の差が開いた訳じゃなくて、
深さ5000の関数呼び出しで130倍の差が開いたって事を理解してる?
5000万要素のクイックソートなら最良のケースで深さ25の再帰だからね?
130倍どころか2倍にもならないからね?
291 :
デフォルトの名無しさん
2015/12/26(土) 19:23:54.44 ID:6n5NtJkM
>>286 クイックソートを実装して試したのか?あ?
だれが実装するかと言っていたのと矛盾するだろうが。
つまり、君は嘘をついている。ゆえに俺が言ってることの方が正しい。はい論破。
292 :
デフォルトの名無しさん
2015/12/26(土) 19:26:45.13 ID:6n5NtJkM
>>289 当たり前だろ。小さな町の町長が東京の都知事になって
仕事をこなせると思うか?数が増えるほどにコストは増大するんだ。劇的にな。劇的にだ!
293 :
デフォルトの名無しさん
2015/12/26(土) 19:29:40.16 ID:Igcba1qr
障害児発作を発症中
294 :
デフォルトの名無しさん
2015/12/26(土) 19:31:02.17 ID:EXUTS9i+
>>292 すまん、その例えどこまで信用していいか分からないからそういうの語るときは式でお願い
295 :
デフォルトの名無しさん
2015/12/26(土) 19:31:21.63 ID:6n5NtJkM
>>290 ヤってみたのか?ヤったのか?ヤってから言えや!
さっさとクイックソートのコード提示しろよ!
いつまでグズグズ言ってりゃ気が済むんだ
俺はお前がクイックソートをシェルで実装するのをあとどれだけ待てばいいわけ?
296 :
デフォルトの名無しさん
2015/12/26(土) 19:32:53.62 ID:Igcba1qr
>>295 再帰は数万倍遅いといったお前が実証しろよ
297 :
デフォルトの名無しさん
2015/12/26(土) 19:33:00.02 ID:6n5NtJkM
>>294 log2・5000 : log2・5000 ? 30 ⇒ log2・50000000 : 10^4 ? A
QED.
298 :
デフォルトの名無しさん
2015/12/26(土) 19:34:26.18 ID:Igcba1qr
1万倍高速なクイックソートはよ
299 :
デフォルトの名無しさん
2015/12/26(土) 19:34:37.78 ID:6n5NtJkM
>>296 俺は
>>201 で示したし、それで十分に満足の行く結果を得た。
>>201 に不満だというのならそれを超えるものをお前が書け。自分でやれ。
他人にやらせるっていうのは俺の常識からは考えられない。
300 :
デフォルトの名無しさん
2015/12/26(土) 19:35:10.69 ID:6n5NtJkM
>>298 お前がやるんだ。お前が言い出したことだろうが。
301 :
デフォルトの名無しさん
2015/12/26(土) 19:35:32.98 ID:oIXuKyHb
>>295 どうして俺が実装しなきゃならないわけ?
数万倍遅いって言い出した奴が実証のためにコードを提供するのが筋だろ?
302 :
デフォルトの名無しさん
2015/12/26(土) 19:42:36.24 ID:6n5NtJkM
>>301 そんな筋は通らない。実証コードが欲しいといいだしたのは
お前なのだからお前が自分で書け。言い出しっぺの法則は
プログラマを始め科学的論証に関わる人間すべてに通じる基本原則だ。
どうやればそれを確認できるかという手順も道筋も結論も示した。
自分の満足のいくものが欲しいのなら自分で行動しろ。
他人の足にしがみつくな、気持ち悪い。
303 :
デフォルトの名無しさん
2015/12/26(土) 19:44:38.98 ID:6n5NtJkM
1万倍の実証コードとか言い出しといて書かないってどういうことよ?
他人に頼りっきりってどういうことよ?
夢があるのなら自分で叶えろよ
親の足かじってんじゃねえぞニート野郎
304 :
デフォルトの名無しさん
2015/12/26(土) 19:50:48.20 ID:oIXuKyHb
>>302 IDをよく見ろ。俺は実証コードが欲しいだなんて一言も言ってない。
305 :
デフォルトの名無しさん
2015/12/26(土) 19:51:36.37 ID:EXUTS9i+
>>297 何この記法初めて見た
もしかして情報界隈では常識なのか?
306 :
デフォルトの名無しさん
2015/12/26(土) 19:51:49.58 ID:Igcba1qr
>>219 親のスネかじってんじゃねーぞニート野郎
とっとと数万倍速いクイックソートの実証しろよ
307 :
デフォルトの名無しさん
2015/12/26(土) 19:54:34.25 ID:Igcba1qr
ID:6n5NtJkMは発狂して「再帰は数万倍遅い」発言をウヤムヤにしたい模様
でも、まだ300レス。先は長いぞ。頑張れ。
308 :
デフォルトの名無しさん
2015/12/26(土) 19:56:25.26 ID:oIXuKyHb
>>305 俺も見たこと無い。
一瞬、三項演算子にも見えるけど順序がおかしいし。
309 :
デフォルトの名無しさん
2015/12/26(土) 19:57:11.33 ID:6n5NtJkM
>>304 言ったかどうかは問題じゃない!
お前はクイックソートで1万倍の差があるのか確認したい、
それを確認する手段としてシェルでクイックソートを実装すればわかる
ということを俺は示したんだよ。それだけわかってればいいよもう!
310 :
デフォルトの名無しさん
2015/12/26(土) 20:00:13.46 ID:6n5NtJkM
>>308 ?はただの文字化けだぞ。
数理式計算量証明の理想解近似法を大学で習ってたらわかるだろ。
情報科学の基礎中の基礎だし。
311 :
デフォルトの名無しさん
2015/12/26(土) 20:02:01.94 ID:oIXuKyHb
>>309 いいや、そもそもそんな事は望んでない。よく読め。
俺が言いたいのは、1万倍もの差が出るなんて事は理論上ありえないって事だ。
それでも尚、実際に1万倍の差が出ると言い張るのであれば
それを実証するコードを君が示すべきだよね?
312 :
デフォルトの名無しさん
2015/12/26(土) 20:03:37.49 ID:EXUTS9i+
>>310 すまん、その文字化けしてるところ元は何だったのか教えてくれ
O?
313 :
デフォルトの名無しさん
2015/12/26(土) 20:05:55.80 ID:6n5NtJkM
>>311 だから、俺は示したって言ってるだろうが!
>>201 でくっきりはっきりと証明してみせただろうが。
それで満足できないというのであれば、満足の行くコードを見たいというのであれば
お前がそれを書くべきだ!それが論理的検証というものだ。科学的な姿勢というものだ。
他人の論文に満足できないと言ってるばかりじゃ学会では一切評価されないよ。
それを超える論文を自分で書いてこれでどうだと魅せつけるべきだ。
君はシェルでクイックソートを書くべきなんだ!!
314 :
デフォルトの名無しさん
2015/12/26(土) 20:06:59.46 ID:6n5NtJkM
>>312 掛け算の掛けるだ。
右側では1万倍になってるのがわかっていただけると思う。
315 :
デフォルトの名無しさん
2015/12/26(土) 20:09:01.51 ID:YV12MLKo
316 :
デフォルトの名無しさん
2015/12/26(土) 20:09:33.38 ID:YV12MLKo
317 :
デフォルトの名無しさん
2015/12/26(土) 20:13:31.65 ID:oIXuKyHb
>>313 いいかい?
君は「示した」と何度もはっきり発言してはいるけど、実のところ何も示しちゃいないんだ。
318 :
デフォルトの名無しさん
2015/12/26(土) 20:22:57.69 ID:6n5NtJkM
>>315 バカかお前は。大脳半球が全損して産まれて来たのか?
名前解決に時間がかかるとするならば、名前解決まで含めて再帰呼出しだ。
外務省はシリアへの渡航を自粛するよう日本国民に通告しているが、そんな不安な情勢の中、
「シリアが危険なんじゃないテロリストが危険なんだ」と言って
意気揚々とシリアに出かけていく頭の中お花畑野郎と同じだろうが。
お前が言ってるのはそれと全く同じこと。
シリアという地域でテロの被害に遭う確率が高いから外務省は渡航を自粛するように
必死に呼びかけているんだ。少しでも日本の国民がテロの被害に遭わないよう骨身を削って
頑張っているんだ。再帰呼出しでプログラム事故に遭う確率が高いから俺は再帰を自粛するよう
呼びかけているんだ。外交官としての俺の立場に立って再考してみろ。お前がどれだけ
愚かなことを言っているか今一度ようく考えてみることだな。
319 :
デフォルトの名無しさん
2015/12/26(土) 20:24:31.77 ID:EXUTS9i+
やべえ記号わかってもなお式の意味わかんねえw
320 :
デフォルトの名無しさん
2015/12/26(土) 20:25:46.83 ID:Igcba1qr
障害児は
シェル関数呼び出しはwhileより130倍遅い
と
再帰版のクイックソートは何万倍も遅い
が等価らしい
必死で再帰を否定しているバカが低知能であることのエビデンスがまた一つ明らかになってしまった
321 :
デフォルトの名無しさん
2015/12/26(土) 20:27:35.19 ID:6n5NtJkM
>>317 >>201 の画像が見えないのか?俺はエビデンスをしっかりちゃっかりくっきりまるっきり示したぞ。
お前はアイマスク付けて前が見えないと言ってるだけのただのうつけ者。話にならない。
322 :
デフォルトの名無しさん
2015/12/26(土) 20:30:11.96 ID:EXUTS9i+
もしかしてだけどさ、もししてだけどさ、
>>201で示されてることってシェル関数呼び出しがシェルwhileより130倍遅いことだけじゃね?
323 :
デフォルトの名無しさん
2015/12/26(土) 20:35:37.94 ID:6n5NtJkM
>>322 おいおいいい加減にしろよナメクジ野郎。
自らの関数を呼び出すことを再帰と言うのだろうが。
関数の呼び出しが遅い、すなわち再帰の効率がとてもよろしくないということだ。
テロリストが民間人を殺害するのならば、テロがはびこっているシリアには行くべきじゃないということだ。
お前、後藤さんのご家族の前で後藤さんが悪いって言えるのか?後藤さんは悪いよ。
とても危険なところと知りつつシリアに言ったんだから。だけど、それをご家族の前で言う意味がないよね。
324 :
デフォルトの名無しさん
2015/12/26(土) 20:38:45.39 ID:6n5NtJkM
再帰を使うっていうのはテロリストの前に自らの首を差し出すことと同義。
何があっても文句言うな。そして周囲の人間をその愚行に巻き込むな。
悲しませるな。俺はお前らが再帰を使うと悲しいよ。
325 :
デフォルトの名無しさん
2015/12/26(土) 21:07:17.88 ID:oIXuKyHb
純粋にシェルスクリプトだけでクイックソートを組むのは骨が折れたぞっと
ループのほうが遅いです本当にどうもありがとうございました
326 :
デフォルトの名無しさん
2015/12/26(土) 21:10:42.27 ID:oIXuKyHb
327 :
デフォルトの名無しさん
2015/12/26(土) 21:21:55.47 ID:6n5NtJkM
____
/ \
/ ─ ─ \
/ (●) (●) \
| (__人__) |
\ `⌒´ ,/
/ ー‐ \
328 :
デフォルトの名無しさん
2015/12/26(土) 21:22:21.55 ID:EXUTS9i+
なんだやっぱり再帰の方がいいのか
329 :
デフォルトの名無しさん
2015/12/26(土) 21:26:26.06 ID:hFLlv/LI
ぐうの音も出ないなこれは
330 :
デフォルトの名無しさん
2015/12/26(土) 21:31:21.64 ID:6n5NtJkM
シリアとか言わなきゃよかった
後藤さんのくだりとか意味わかんないし
331 :
デフォルトの名無しさん
2015/12/26(土) 21:40:05.38 ID:hFLlv/LI
フィボナッチとかはループと再帰で指数倍の差が出るんだっけ?
332 :
デフォルトの名無しさん
2015/12/26(土) 22:10:31.84 ID:oIXuKyHb
メモ化しないコードだとそうなるね
333 :
デフォルトの名無しさん
2015/12/26(土) 22:19:22.17 ID:hFLlv/LI
メモ化とか線形のメモリ食うじゃね?
334 :
デフォルトの名無しさん
2015/12/26(土) 22:46:18.19 ID:JxygBNoz
335 :
デフォルトの名無しさん
2015/12/26(土) 23:20:10.16 ID:YV12MLKo
>>334 それは再帰的定義を使う方では?
フィボナッチ数列の第n項を直接nの式で表せるはずだが
336 :
デフォルトの名無しさん
2015/12/26(土) 23:36:55.55 ID:JxygBNoz
>>335 文脈読もうな。
メモ化に必要な記憶領域が線形ではないか、と言ってる奴がいたから定数だ、と答えただけ。
337 :
デフォルトの名無しさん
2015/12/26(土) 23:44:58.30 ID:jxcpNE9M
まだアーキ依存どころか言語依存の話してるの?
338 :
デフォルトの名無しさん
2015/12/27(日) 00:05:08.34 ID:TlhMnrM9
再帰メモ化定数メモリフィボナッチってどんなソースになるの?
339 :
デフォルトの名無しさん
2015/12/27(日) 00:35:22.25 ID:nuYFrBF7
fibonacci = fib (0,1)
fib (m1,m2) 0 = m2
fib (m1,m2) n = fib (m2, m1+m2) (n-1)
340 :
デフォルトの名無しさん
2015/12/27(日) 00:38:15.78 ID:nuYFrBF7
タプルの代わりに木かハッシュを使えば値を全部保持する
普通のメモ化にできるがフィボナッチの計算にはもちろん不要
341 :
デフォルトの名無しさん
2015/12/27(日) 00:54:47.63 ID:Y7IK7QLW
>>325 bashを使うのであれば
if [ $i -ge $j ]; then
の代わりに
if (( $i < $j )); then と書ける。
また(( )) の中で単体の変数は$を省略できる
if (( i < j )); then
一行で書くこともできる。
(( i >= $ )) && break
342 :
デフォルトの名無しさん
2015/12/27(日) 01:09:36.05 ID:Y7IK7QLW
stack=("${stack[@]:0:((${#stack[@]}-2))}")
これは、こう書ける。
stack=("${stack[@]::${#stack[@]}-2}")
ついでに、""をつける方が正しいのではあるが、
値にスペースが無ければ、"" は省略可能。
343 :
デフォルトの名無しさん
2015/12/27(日) 01:15:06.76 ID:Y7IK7QLW
p=$(( $((${array2[$i]}+${array2[$j]}))/2 ))
$((・・・)) の中では普通に () が使用可能
p=$(( (${array2[$i]} + ${array2[$j]}) / 2 ))
344 :
デフォルトの名無しさん
2015/12/27(日) 01:21:25.37 ID:Y7IK7QLW
for i in `seq 1 1 1000`; do
`` は基本的に $() と同等。新しい$()の使用が推奨されている。
for i in $(seq 1 1 1000); do
また、これは以下のように書ける
for i in {1..1000}; do
345 :
デフォルトの名無しさん
2015/12/27(日) 01:32:25.91 ID:Y7IK7QLW
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 :
デフォルトの名無しさん
2015/12/27(日) 01:46:16.35 ID:Y7IK7QLW
347 :
デフォルトの名無しさん
2015/12/27(日) 02:00:40.37 ID:qGJmRem2
ループの途中でコマンドを呼び出すようにすればもう少し遅くできるんじゃないかな。
348 :
デフォルトの名無しさん
2015/12/27(日) 02:20:49.37 ID:Y7IK7QLW
さーて、コードをほとんど読まずに、Perl版をそのまま置き換えてみたが
きちんと動かんぞとw 面倒くさいな。
速度的には再帰版より速くなりそうな感じはしてるが、処理間違ってるからなw
349 :
デフォルトの名無しさん
2015/12/27(日) 02:32:42.88 ID:Y7IK7QLW
あ、できたっぽい? 参考にしたコードに二箇所バグが有るようだな。
> &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 :
デフォルトの名無しさん
2015/12/27(日) 02:34:29.15 ID:Y7IK7QLW
ごめん嘘だったw 。あれぇ~?
351 :
デフォルトの名無しさん
2015/12/27(日) 02:58:09.23 ID:Y7IK7QLW
Perl版実行してみたがもともとのコードからして動いてないw
352 :
デフォルトの名無しさん
2015/12/27(日) 03:31:06.37 ID:Y7IK7QLW
353 :
デフォルトの名無しさん
2015/12/27(日) 03:35:18.72 ID:Y7IK7QLW
ループの方が速かったので訂正よろ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 :
デフォルトの名無しさん
2015/12/27(日) 03:56:54.62 ID:nuYFrBF7
定数の差とかどうでもいい
355 :
デフォルトの名無しさん
2015/12/27(日) 07:31:06.68 ID:hwv/tSGM
356 :
デフォルトの名無しさん
2015/12/27(日) 07:39:49.49 ID:Y7IK7QLW
357 :
デフォルトの名無しさん
2015/12/27(日) 07:50:22.72 ID:hwv/tSGM
358 :
デフォルトの名無しさん
2015/12/27(日) 07:55:16.56 ID:Y7IK7QLW
言い出しっぺの定義を変えるなよw
本当に往生際が悪いw
359 :
デフォルトの名無しさん
2015/12/27(日) 08:00:41.71 ID:hwv/tSGM
>>353でお前が訂正を求めたレスはID:6n5NtJkMの
「再帰は1万倍遅い」に対するレス。
なので、訂正を求めるには10000倍高速化する必要がある
知能障害児には理解不能かな?
360 :
デフォルトの名無しさん
2015/12/27(日) 08:06:42.55 ID:Y7IK7QLW
と言われてもなぁw
俺は1万倍速いなんて言ってないし。
ループのほうが速いという証拠も出したからどうでもいいかなw
361 :
デフォルトの名無しさん
2015/12/27(日) 08:16:44.55 ID:hwv/tSGM
じゃ、求めた訂正を取り消しなさい。
362 :
デフォルトの名無しさん
2015/12/27(日) 08:18:08.68 ID:Y7IK7QLW
>>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
少し速いと10000倍速いの区別がつかないおバカさんとうエビデンス(笑)
364 :
デフォルトの名無しさん
2015/12/27(日) 09:33:20.24 ID:Zmrinoji
分かったことは
・再帰をただ単にループに直すと却って遅くなる
・最適化を施せばループのほうが速くなるが、10000倍速くなるなんてことはない
の2点でおっけい?
365 :
デフォルトの名無しさん
2015/12/27(日) 09:55:25.37 ID:TQTcd7lL
そうだな。シリアがどうとか言い始めるほどループの方が優秀な訳では無さそうだな
366 :
デフォルトの名無しさん
2015/12/27(日) 10:12:22.58 ID:dpCOQ+Jx
∞倍だね。
再帰なんってのと比較すること自体おかしい。
却って遅くなるなんて書いてる恥知らずは、プログラミング技術が無さ過ぎ。
367 :
デフォルトの名無しさん
2015/12/27(日) 10:24:13.63 ID:Zmrinoji
>>366 昨日から昨晩に掛けてのやり取りを知らないのか?
俺はそのやり取りから、
>>364が分かった事の全てであるって発言しただけなんだけど。
368 :
デフォルトの名無しさん
2015/12/27(日) 10:36:38.52 ID:dpCOQ+Jx
やり取りからだって?
2chの妄想だけじゃなくて現実を見ろよ。
369 :
デフォルトの名無しさん
2015/12/27(日) 10:40:01.29 ID:hwv/tSGM
∞倍 wwwww
無限大を憶えたての小学生かよ
quick sort 再帰/quick sort 非再帰 = ∞, すなわちquick sort 非再帰が0って事だな。
再帰を必死に否定しているバカの主張
1 スタックが制限の厳しいリソースである環境が全てだと思い込み、再帰の致命的なペナルティだと主張する
2 シェル関数呼び出しをエビデンスとして、再帰が130倍遅いと主張する
3 再帰版のqsortは数万倍遅いと主張するが、数万倍速いはずの非再帰版を示さない
4 知能が低く再帰を理解できない。それをもって再帰は難解と主張する。
5 非再帰版qsortの実行時間はゼロ
本当に知能が低い
370 :
デフォルトの名無しさん
2015/12/27(日) 11:19:02.84 ID:BwztOoZh
>>364 最適化なくてもループのが速いでしょ
10000倍は無いがw
371 :
デフォルトの名無しさん
2015/12/27(日) 11:22:49.99 ID:Zmrinoji
>>368 お前の中ではそうなんだろうな。そんな事より現実を見ろよ。
大本の彼らの主張は「クイックソートをお題にした場合に於いて再帰はループに比べて何万倍も差がでる(
>>219)」
俺らの主張は「そんなに差がでることは理論的にありえない(
>>286)」
であって、
ループのほうが再帰より「僅かでも」速いかどうか(
>>352-353)なんざ元々議論していない。
クイックソートをやる上で比較にならないほど再帰のほうが遅くなるというならソースを出せや
372 :
デフォルトの名無しさん
2015/12/27(日) 11:23:28.75 ID:yWds0j/q
繰り返しの方が再帰より速い!
(ただしシェルスクリプトに限る)
373 :
デフォルトの名無しさん
2015/12/27(日) 11:23:33.41 ID:Zmrinoji
374 :
デフォルトの名無しさん
2015/12/27(日) 11:29:16.92 ID:nlFV9EHx
>>371 引数受け渡しとかレジスタ待避とかで、余分なメモリー操作が発生する。
375 :
デフォルトの名無しさん
2015/12/27(日) 11:32:56.76 ID:Zmrinoji
>>374 >>260 定数オーダーの空間計算量で計算が出来ないなら、原理的に余分なメモリ操作は避けられない。
それはループでも一緒。
376 :
デフォルトの名無しさん
2015/12/27(日) 11:43:09.26 ID:yWds0j/q
>>374 明示的なスタック操作と大差ないのでは?
377 :
デフォルトの名無しさん
2015/12/27(日) 11:52:39.31 ID:BwztOoZh
>>373 純粋に処理速度の話してんならネイティヴコード化したものでないとさ
378 :
デフォルトの名無しさん
2015/12/27(日) 12:07:38.28 ID:BwztOoZh
>>375 横ですが、再帰呼出だとcallのオーバーがある分遅くなるで良いのかな?
まあ数パーセント程度だと思うけど
379 :
デフォルトの名無しさん
2015/12/27(日) 12:20:57.14 ID:nuYFrBF7
クイックソートだからなんとかなってるだけで
たとえば赤黒木の操作を自前でスタック管理するアホはいないわけ
380 :
デフォルトの名無しさん
2015/12/27(日) 12:27:15.41 ID:Zmrinoji
>>377 ほい、最適化しなければループのほうが遅い証拠。
381 :
デフォルトの名無しさん
2015/12/27(日) 12:33:24.41 ID:BwztOoZh
382 :
デフォルトの名無しさん
2015/12/27(日) 12:35:34.85 ID:Zmrinoji
>>378 Pen4のデータシートの値を元にするなら
ループのコストと再帰のコストは約2.5~3clockくらいの差になると思う。
今時のCPUならもっと差は縮まるだろうし、実際に測った訳じゃないけど
だいたいそのくらいになる筈。
383 :
デフォルトの名無しさん
2015/12/27(日) 12:38:44.94 ID:Zmrinoji
>>381 最適化が無くてもループの方が「僅かでも」速いって言い張るお前に
そうじゃない場合もあるって言ったのが
>>373 で、それに対しお前はネイティブコードで比較しろっつーから
「最適化無しのネイティブコードで」比較したんだが。
一体お前は何を求めてるんだ?
384 :
デフォルトの名無しさん
2015/12/27(日) 12:38:57.92 ID:BwztOoZh
>>382 そこまで解説できる人ならネイティヴコードだと逆転するのわかるでしょ
アセンブリで書けとは言わんけどさ
>>381はすまん
385 :
デフォルトの名無しさん
2015/12/27(日) 12:42:13.97 ID:Zmrinoji
>>384 ループ以外の本質的な処理に100clock掛かるとすれば、
数%の差だけどループより再帰のが遅くなるって意見は正しいねって話さね
381については了解
386 :
デフォルトの名無しさん
2015/12/27(日) 12:46:31.99 ID:BwztOoZh
387 :
デフォルトの名無しさん
2015/12/27(日) 13:08:45.42 ID:yWds0j/q
>>378 tail callを繰り返しに変換できるようなケースだと
関数呼び出しはコスト高かも知れないが、
ループ版では明示的スタック操作をしなければならない場合、
call,ret相当のことをjpと組み合わせて明示的にやらないといけない。
通常、関数呼び出し後のスタックフレームの確保はcalleeが明示的にやるからループ版と変わらないが、
スタックフレームの開放はretが自動的にやる。
だからコスト的には大差なく、
関数呼び出しの方が有利なケースだってあるはず。
繰り返しの明示的なスタック操作が圧倒的有利にあるのは、
FILOじゃなくてFIFOにしたり戦略が建てられること。
388 :
デフォルトの名無しさん
2015/12/27(日) 13:36:27.64 ID:9aquywWv
>>379 お前は何を言っているんだ。
FreeBSDもLinuxも.NETもJavaも赤黒木はループで実装してるぞ。
再帰はプログラムの中に時限爆弾仕込むようなもの。再帰使うやつはテロリスト。
389 :
デフォルトの名無しさん
2015/12/27(日) 13:46:00.90 ID:nuYFrBF7
頑張ってバグ入れずに済んでよかったね、としか。
しかもそれで得られる速度の向上も微々たるもの。
390 :
デフォルトの名無しさん
2015/12/27(日) 14:00:50.68 ID:9aquywWv
>>389 再帰にしたらバグが減るってものでもないしなあ。
不変オブジェクトを使うから再帰がやりやすいのであって
可変オブジェクトでの再帰はループよりもややこしいところがあるよ。
391 :
デフォルトの名無しさん
2015/12/27(日) 14:27:20.76 ID:+491JRRx
>>388 >赤黒木はループで実装してる
本当か?やればできるものなのか?証拠をみせてみろ
平衡ニ分木であるからスタックもむやみに深くならないし,
正直なところ,可能だとしてループ化するメリットがあるのかね
392 :
デフォルトの名無しさん
2015/12/27(日) 14:37:53.35 ID:9aquywWv
>>391 freebsd red black tree source
とかで検索すれば出てくるよ
393 :
デフォルトの名無しさん
2015/12/27(日) 14:44:37.25 ID:BwztOoZh
>>390 バグ云々ではなくて、コード数や可読性だと思うが
そもそも再帰呼出を理解出来ない人は論外だが
394 :
デフォルトの名無しさん
2015/12/27(日) 14:47:35.86 ID:kNkpHWWg
知らないうちにコードが再帰化してハマりました
のほうが多そう
395 :
デフォルトの名無しさん
2015/12/27(日) 15:00:09.33 ID:9aquywWv
396 :
デフォルトの名無しさん
2015/12/27(日) 15:03:49.95 ID:BwztOoZh
>>395 バグが増える要因はプログラミングソースのステップ数や可読性に左右されるのであって、アルゴリズムは特に関係ないということ
397 :
デフォルトの名無しさん
2015/12/27(日) 15:06:51.61 ID:9aquywWv
>>396 アルゴリズムによってステップ数や可読性は変わるよ
398 :
デフォルトの名無しさん
2015/12/27(日) 16:29:32.45 ID:hwv/tSGM
399 :
デフォルトの名無しさん
2015/12/27(日) 16:32:53.51 ID:9aquywWv
>>398 知らない人がいたから言っただけだよ。
ループで実装されてるんだよーって。
インターフェースを実装してないからとか理屈付けする意味あるのかな。
バカはお前。
400 :
デフォルトの名無しさん
2015/12/27(日) 16:47:04.16 ID:9aquywWv
インターフェース?
再帰と関係あるのかな?
わからん。この世はわからんことだらけだ。
401 :
デフォルトの名無しさん
2015/12/27(日) 17:00:20.74 ID:GUkoCLfr
> LinuxもFreeBSDも木全体に対して何らかの操作を行うインターフェースを実装してない
?
OSが…インタフェースを…実装?
402 :
デフォルトの名無しさん
2015/12/27(日) 17:01:14.29 ID:Zmrinoji
403 :
デフォルトの名無しさん
2015/12/27(日) 17:03:04.29 ID:9aquywWv
404 :
デフォルトの名無しさん
2015/12/27(日) 17:03:49.11 ID:9aquywWv
405 :
デフォルトの名無しさん
2015/12/27(日) 17:04:55.68 ID:Zmrinoji
>>403 ほう、つまり君はただのループをスタック管理と解釈する訳だね?
406 :
デフォルトの名無しさん
2015/12/27(日) 17:05:12.17 ID:X/TfzIFq
最近、書き込みが多くなって
このスレの勢いがすごい
407 :
デフォルトの名無しさん
2015/12/27(日) 17:07:35.61 ID:Zmrinoji
408 :
デフォルトの名無しさん
2015/12/27(日) 17:18:58.89 ID:9aquywWv
>>405 再帰をループに置き換えるときには
再帰で暗黙的に管理されるスタック上の情報を
明示的に管理する必要がある。それをやるのは面倒だから
赤黒木は再帰で実装されているはずだというのが
>>379に関する俺の解釈。
面倒なことないよ、現に赤黒木はループで実装されることが多いよっていうのが
>>388 409 :
デフォルトの名無しさん
2015/12/27(日) 17:21:03.25 ID:9aquywWv
語句の解釈に文句つけるのはあまり建設的じゃないような・・・。
その先には何もないような・・・。
410 :
デフォルトの名無しさん
2015/12/27(日) 17:24:39.80 ID:9aquywWv
クイックソートについても再帰のスタックをそのまま
ループで再現するっていうのはどうかと思うなあ。
末尾再帰は単純なループに変換できる。ループで書くならループらしい書き方をするべき。
411 :
デフォルトの名無しさん
2015/12/27(日) 17:26:57.17 ID:Zmrinoji
>>408 ふーむ。
複雑な再帰構造を持つ場合、例えば再帰下降構文解析器みたいに複雑な相互再帰をする場合には
クイックソートの時のように簡単に再帰をループで置き換えることは出来ない。
そして一般に再帰をループで置き換えるならスタックが必要で、
込み入った再帰をスタックを使ってでもループに置き換える奴は居ないだろう。
現に赤黒木をスタック管理をしてでも強引にループで書き直すようなアホは居ないんじゃないの?
というのが
>>379に関するこっちの解釈。
それに対し、いやいや赤黒木はループで実装してるんだぜ!ってのが
>>388の俺の解釈。
話が噛み合って無くね?ってのが
>>402 日本語の問題な気も
412 :
デフォルトの名無しさん
2015/12/27(日) 17:28:09.10 ID:9aquywWv
>>411 解釈が違うのなら話が噛み合わないことについては筋が通るかと。
413 :
デフォルトの名無しさん
2015/12/27(日) 17:29:32.88 ID:Zmrinoji
>>410 そもそもクイックソートは分割統治法の典型例だからなぁ。
自分を2度呼び出す時点で末尾再帰的じゃないし
ループらしい書き方をするとクイックソートとは呼べないシロモノになると思う
414 :
デフォルトの名無しさん
2015/12/27(日) 17:30:37.18 ID:Zmrinoji
あ、勿論クイックソートをもっと単純なループで書き直せるってんなら歓迎するよ!
415 :
デフォルトの名無しさん
2015/12/27(日) 17:33:05.31 ID:9aquywWv
>>413 一方の再帰呼び出しは末尾再帰になるっしょ。ループに置換できる。
416 :
デフォルトの名無しさん
2015/12/27(日) 17:33:09.23 ID:Zmrinoji
>>412 複数の解釈の仕方がありうるなら、
オレオレ解釈を元に相手をこき下ろす前にやることがあるだろうと
417 :
デフォルトの名無しさん
2015/12/27(日) 17:34:13.75 ID:Zmrinoji
>>415 ・・・・・・それは依然として再帰関数と呼ぶのでは?
418 :
デフォルトの名無しさん
2015/12/27(日) 17:37:56.44 ID:9aquywWv
>>416 僕とー君とーは解釈が違うよねってことだよ。
こき下ろすべきじゃないと思うのは君の勝手ー。
こき下ろすのも僕の勝手ー。
ヒューマニズム振りかざす人大嫌いー。←これ僕
419 :
デフォルトの名無しさん
2015/12/27(日) 17:39:20.40 ID:9aquywWv
>>417 ループを書く場合、一方の再帰呼び出しは末尾再帰だから
単純なループに置き換えられるよねってことだから、もはや再帰関数とは呼ばないよ。
420 :
デフォルトの名無しさん
2015/12/27(日) 17:42:10.80 ID:Zmrinoji
>>418 いや、君が
>>403で言ったのは「スタック管理」の解釈の違いだろ?
「赤黒木が再帰で書かれてる」等とは一言も言ってない
>>379を読んだ君が
>>408みたいな解釈をして、
人のことをテロリスト呼ばわりするのってどうなの?
421 :
デフォルトの名無しさん
2015/12/27(日) 17:43:59.16 ID:Zmrinoji
422 :
デフォルトの名無しさん
2015/12/27(日) 17:46:46.63 ID:YWwZOVBb
末尾再帰を勘違いしている人がいるので説明しておこう。
末尾再帰は「再帰を末尾再帰で書けば速くなる」というものではなくて
(単純な)ループを何らかの理由で再帰の形にしないといけない時、
末尾再帰の条件を満たすように、ループを再帰に変換すると
コンパイラが再帰をループに逆変換してくれる機能
なので、再帰を全て末尾再帰にできるわけではなく
(末尾再帰にできるのは、元が単純なループの場合のみ)
また、ループ ─(人間)→ 再帰 ─(コンパイラ) → ループ
というふうに、ループに戻しているだけなのでループより速くなることはない。
423 :
デフォルトの名無しさん
2015/12/27(日) 17:47:27.00 ID:hwv/tSGM
>>401,404
FreeBSDのrbtreeもLinuxのrbtreeもそういうインターフェースを実装していないって事だよ。
424 :
デフォルトの名無しさん
2015/12/27(日) 17:54:40.33 ID:Zmrinoji
>>422 より正確には、「再帰全てをノーコストで末尾再帰にできるわけではなく」かな。
関数がファーストクラスならCPSに変換すれば末尾再帰の形にはなる。
・・・・・・ヒープガリゴリ使うし、スタックを自前で持つのと変わらんけど。
425 :
デフォルトの名無しさん
2015/12/27(日) 17:56:45.58 ID:9aquywWv
>>420 >>379は「赤黒木が再帰で書かれてる」とは一言も言ってないけれども、
「赤黒木の操作を自前でスタック管理するアホはいない」と言っているのだから
赤黒木の操作は、自前でスタック管理しないやり方、つまり再帰で実装される
と思っているという解釈は妥当だと思ってる。悪いけど、この解釈については譲歩するつもりはないよ。
120%君が間違っているし、再帰を使う人は120%テロリスト。それでいいね?
426 :
デフォルトの名無しさん
2015/12/27(日) 17:58:29.79 ID:YWwZOVBb
>>424 速くするための末尾再帰なのに、
逆に遅くなったら本末転倒だよなw
427 :
デフォルトの名無しさん
2015/12/27(日) 18:00:45.81 ID:9aquywWv
>>421 無理。再帰を使うなら全部再帰で書くべき。
ループを使う処理では再帰を書かない。
再帰を使う処理ではループを書かない。
それで初めてループと再帰の決着がつけられる。
そしてループが勝利する。
428 :
デフォルトの名無しさん
2015/12/27(日) 18:01:48.21 ID:Zmrinoji
>>425 確率が1を超えてるとか、幼稚園に迷い込んだ気分だよ。
「赤黒木の操作を自前でスタック管理するアホはいない」と言っている以上、
赤黒木の操作は、スタックなんてものをそもそも自分で触らないようなやり方、
つまり再帰か、又は上手なループで実装されているって話だろ?
フィボナッチ数を計算する関数をスタックを使わずに書いたって言った時、君は再帰の方しか思い浮かべられないのかい?
もしかして自閉症患者かい?
429 :
デフォルトの名無しさん
2015/12/27(日) 18:04:52.45 ID:Zmrinoji
>>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
>>428 >>389を見るに、そうじゃないと思うんだがなあ。
俺は自閉症患者だけれども、それとこれとは関係ない。
お前は全国の自閉症患者やそのご家族の方に謝罪するべき。
あとテロリストにも。
431 :
デフォルトの名無しさん
2015/12/27(日) 18:15:49.41 ID:9aquywWv
>>429 どうやってって何がだよ?
ループでか?再帰でか?
432 :
デフォルトの名無しさん
2015/12/27(日) 18:18:05.73 ID:Zmrinoji
>>430 日本語って難しいよね。分かる分かる。
>>389の解釈は、
再帰でも書けるところをループで書いたんだ。へぇ。バグってなくて良かったね。ご苦労さん。
じゃないの?
>>379が再帰を仮定しているかどうかとは別問題。
俺も自閉症患者だけどね。自分に謝るのって変な感じがするよ。
433 :
デフォルトの名無しさん
2015/12/27(日) 18:18:46.64 ID:Zmrinoji
>>431 どっちでも良いけど、どっちかしか「使ってはならない」というローカルルールの元ではどう書くの?
434 :
デフォルトの名無しさん
2015/12/27(日) 18:47:59.48 ID:Zmrinoji
>>431 まだ出来ないの?
>>429に7行で書いたような、こんなコードが走ります的な切れ端で十分伝わるんだよ?
435 :
デフォルトの名無しさん
2015/12/27(日) 18:53:56.10 ID:9aquywWv
>>432 スタックで管理の解釈の違いだな。やっぱり噛み合わない。
436 :
デフォルトの名無しさん
2015/12/27(日) 18:57:04.25 ID:9aquywWv
>>434 あのさ、同意も取らずに強引に物事を進めようとするのってどうかと思うよ。
北風と太陽って話くらい知ってるでしょ?コンセンサスってとても大事。
お前コンセントしか知らないだろ。扇風機の線をぶち込んどけば何とかなるものと
しか思ってないだろ。それじゃないからな。
まずは、どういう理由で書いてほしいのかっていうところと
それによって何が成し遂げられるのかっていうところとどうして自分で
やらないのかって言うところを説明して、心からお願いしないと俺の不動の心は動かないよ。
437 :
デフォルトの名無しさん
2015/12/27(日) 19:08:44.13 ID:Zmrinoji
>>435 残念。
>>436 ループを含む関数が再帰関数になれないのであれば、
>>429のような書き方は認めないって事だよね?
君ならどう書くの?って聞いただけなのになんでそんな反応になるのかね?
438 :
デフォルトの名無しさん
2015/12/27(日) 19:10:20.46 ID:/NTMuKoN
横道にそれ過ぎずに、それぞれの論旨を書いてみろよ。
中傷合戦ひどくてわからん。
439 :
デフォルトの名無しさん
2015/12/27(日) 19:12:29.31 ID:9aquywWv
>>437 ループと再帰の優劣をつける場合、ループはループだけで
再帰は再帰だけで実装するべきだよねって話をしただけだよ。
お話の前提をすり替えてあたかもお話が続いているように
するのはよろしくないと思うんだよな。
440 :
デフォルトの名無しさん
2015/12/27(日) 19:13:53.77 ID:9aquywWv
>>438 俺は畑を耕していただけなんだ。そしたら ID:Zmrinoji こいつが
機関銃もって脅してきたんだ。おらはイモが食いたいだけだ。再帰使うやつはテロリストだ。
恐ろしいことだ。
441 :
デフォルトの名無しさん
2015/12/27(日) 19:14:42.52 ID:Zmrinoji
>>438 大本の論旨としては、人のことをテロリスト呼ばわりするのってどうなん?って事なんだけど。
ループと再帰の優劣をつけるなんてどこから出てきた?
442 :
デフォルトの名無しさん
2015/12/27(日) 19:19:02.12 ID:9aquywWv
>>441 テロリストと呼ばれるのが嫌ならテロ行為やらなければいいだろ。
クイックソートでやってただろ。ループがいいか、再帰がいいかって。それのこと。
知らなかったの?じゃあ知って。今知って。
443 :
デフォルトの名無しさん
2015/12/27(日) 19:19:34.89 ID:Rer1VVak
バッファオーバーフロー攻撃を成功させるためには、再帰が最も都合よい。
444 :
デフォルトの名無しさん
2015/12/27(日) 19:26:07.61 ID:Rer1VVak
攻撃されるのと攻撃するのと、どちらが良いか?
当然、攻撃する方が良い。
つまりテロリストは勝ち組なのである。
当該スレにおいて再帰を推奨している人は勝ち組である。
なぜなら危険物を推奨するのは攻撃側だからである。
445 :
デフォルトの名無しさん
2015/12/27(日) 19:30:06.01 ID:9aquywWv
>>443 そういうことだな。昨今、関数型言語の流行に伴って再帰がすぐれたものであると
思い込んだニワカのペーペーどもがろくな知識も持たずに危険なコードを
書きまくって悦に入ってる姿を見ると暗い気持ちになる。再帰というのは
ループに大敗北した歴史を持つものだっていうのを知って欲しい。
for whileというのは再帰の進化形。メガ進化。
446 :
デフォルトの名無しさん
2015/12/27(日) 19:33:08.96 ID:Rer1VVak
お前ら逮捕されても知らんぞ。
公共の場所で再帰を勧めたりしてたら、そのうち警察が事情を聴きに来るぞ。
447 :
デフォルトの名無しさん
2015/12/27(日) 19:40:05.96 ID:Zmrinoji
どうでも良いけど、再帰がテロ行為になるなんて初耳だなぁ
# 今日の夕飯はすき焼きでした
448 :
デフォルトの名無しさん
2015/12/27(日) 19:43:06.97 ID:Rer1VVak
>>447 自動車の256バイトしかないRAMで再帰したら、バシバシ轢き殺すぞ。
そこまでやってこそ本物のテロリストだろ。
449 :
デフォルトの名無しさん
2015/12/27(日) 19:49:26.35 ID:Zmrinoji
450 :
デフォルトの名無しさん
2015/12/27(日) 19:55:14.65 ID:Zmrinoji
>>440 > 俺は畑を耕していただけなんだ。そしたら ID:Zmrinoji こいつが
> 機関銃もって脅してきたんだ。おらはイモが食いたいだけだ。再帰使うやつはテロリストだ。
俺の知ってる事実と違うね。
俺は今日は364から話を始めた。そこにID:9aquywWvが388から割り込んできて、
人のことをやれテロリストだやれ機関銃をもって脅してきただ喚いてるの。
451 :
デフォルトの名無しさん
2015/12/27(日) 20:01:43.77 ID:Rer1VVak
>>450 テロリストは自分のことをテロリストだと思っていないんだよな。
聖戦士だと思ってる。
正義のために再帰を仕込むんだよな。
まあでも、国民側から見ればテロリストなんだけどな。
452 :
デフォルトの名無しさん
2015/12/27(日) 20:02:57.65 ID:Rer1VVak
再帰なんてある意味爆弾みたいなものだしな。
テロリストが使う新型爆弾なんじゃねーかな。
453 :
デフォルトの名無しさん
2015/12/27(日) 20:07:24.21 ID:Zmrinoji
そうやって正義の為にループを仕込むんだね?
よく分かったよ!
ちなみにバッファオーバーフローの攻撃手法としては再帰は下の下だからな。
getsなんかを使った方がよっぽど手っ取り早い上に任意コード実行まで出来る。
454 :
デフォルトの名無しさん
2015/12/27(日) 20:08:29.75 ID:9aquywWv
455 :
デフォルトの名無しさん
2015/12/27(日) 20:10:16.23 ID:Zmrinoji
>>454 知ってるよ?
でも再帰使うやつはテロリスト発言で敵を増やしてないかい?
456 :
デフォルトの名無しさん
2015/12/27(日) 20:12:06.44 ID:9aquywWv
>>455 割り込んでないよね。テロリストと糾弾されて君が勝手にファビョッただけだよね。
僕は畑耕してただけ。
457 :
デフォルトの名無しさん
2015/12/27(日) 20:15:26.35 ID:Zmrinoji
>>456 文脈をよく読もう。
364から始まる再帰とループに関する話に混ざった379に君が割り込んでるね?
458 :
デフォルトの名無しさん
2015/12/27(日) 20:17:05.55 ID:Rer1VVak
459 :
デフォルトの名無しさん
2015/12/27(日) 20:17:12.93 ID:TQTcd7lL
テロリスト(笑)
アホかな?
460 :
デフォルトの名無しさん
2015/12/27(日) 20:17:29.15 ID:TlhMnrM9
お前らなんでそんな盛り上がってんだ?
461 :
デフォルトの名無しさん
2015/12/27(日) 20:17:55.10 ID:9aquywWv
462 :
デフォルトの名無しさん
2015/12/27(日) 20:18:53.79 ID:Zmrinoji
>>458 そうだね、偉大だね。
スプンタ・マンユに祈りを!(宗教ちげぇ)
463 :
デフォルトの名無しさん
2015/12/27(日) 20:25:14.94 ID:Zmrinoji
>>460 いわゆる暇人という奴では。
>>461 木構造って知ってる?
あと、俺はそのレス(
>>379)にその返し(
>>388)って変じゃね?って言っただけで、
それに対して君が「スタックの管理とは」なんて話を始めるから(
>>403)
そのコード(
>>398)の何処にスタックなんて使われてるんですか―って訊いて(
>>405)
それに対してまだ答えが返ってきてないんだけど。
君はあれかな、都合の悪い質問は見なかったことにする人なのかな。
464 :
デフォルトの名無しさん
2015/12/27(日) 20:29:09.10 ID:9aquywWv
>>463 なんで僕にレスしてくるの?
自分が話したいことがあるならそれを話せばいいじゃん。
僕は僕で自分の話したい話を話したい人とするから。
たまたま
>>379だったってだけで君が
>>379と話したいなら
僕はそれを否定しないよ。割り込まれたとも思わない。
ほら話しかけろよ。
>>379も絶対お前のこと好きだって。
言っちゃえよ。好きだって言っちゃえよ!
465 :
デフォルトの名無しさん
2015/12/27(日) 20:29:57.74 ID:Zmrinoji
466 :
デフォルトの名無しさん
2015/12/27(日) 20:31:26.39 ID:9aquywWv
467 :
デフォルトの名無しさん
2015/12/27(日) 20:32:45.93 ID:Zmrinoji
>>466 それで、人のことをテロリスト呼ばわりするのってどうなん?
468 :
デフォルトの名無しさん
2015/12/27(日) 20:33:29.47 ID:5UZSmdOE
ID:Zmrinoji必死だなw
469 :
デフォルトの名無しさん
2015/12/27(日) 20:34:10.68 ID:Zmrinoji
470 :
デフォルトの名無しさん
2015/12/27(日) 20:36:11.58 ID:9aquywWv
>>467 違うんだ、待ってくれ、君のことをテロリストと言ったんじゃない。
再帰を使う人はテロリストなんだ。君じゃない。
471 :
デフォルトの名無しさん
2015/12/27(日) 20:37:37.99 ID:Zmrinoji
472 :
デフォルトの名無しさん
2015/12/27(日) 20:39:37.16 ID:9aquywWv
473 :
デフォルトの名無しさん
2015/12/27(日) 20:40:19.12 ID:Zmrinoji
474 :
デフォルトの名無しさん
2015/12/27(日) 23:12:05.90 ID:P4P/t2xP
お前ら仲良いな
475 :
デフォルトの名無しさん
2015/12/28(月) 00:41:11.60 ID:cpjqbiy5
やっぱり再帰無しでループによるプログラミングが最高だね!
476 :
uy ◆Qawu9.2l1E
2015/12/28(月) 02:41:10.02 ID:/Vjc/SbZ
しね
477 :
デフォルトの名無しさん
2015/12/28(月) 07:13:10.09 ID:N+qRD9W4
uy
品が無さすぎ。
478 :
デフォルトの名無しさん
2015/12/28(月) 08:54:56.95 ID:i05gjBFH
479 :
uy ◆Qawu9.2l1E
2015/12/28(月) 14:13:49.28 ID:FI1ndW8l
私生活において自分ほど品性の高い奴はそうそういないよ
何をしていてもカリスマ性があふれ出してしまう
480 :
uy ◆Qawu9.2l1E
2015/12/28(月) 14:17:04.49 ID:FI1ndW8l
「しね」というのは、実は奥の深い言葉なんだけど知っていましたか?
プログラム中でいえばNULLと似ている
人はなぜ生きるのか、なぜ死なないのか、
その真理を見つける事は誰も出来ていない
よって「死」とは恐怖かもしれないし、救いかもしれない
つまり正解でも不正解でも無い
それゆえに「しね」という言葉を発しても、敵と味方は最終的に五分にしかならない意味のない言葉なんです
だから頻繁に使っていくと良いよ
481 :
デフォルトの名無しさん
2015/12/28(月) 14:30:10.73 ID:i05gjBFH
アスペが語りだしたと聞いて
482 :
デフォルトの名無しさん
2015/12/28(月) 14:59:07.57 ID:kIejf3VS
483 :
デフォルトの名無しさん
2015/12/28(月) 17:06:38.81 ID:6k5OwRcO
再帰じゃないと書いてらんない関数があるのも事実
484 :
デフォルトの名無しさん
2015/12/29(火) 05:12:44.62 ID:GnldGbIR
485 :
デフォルトの名無しさん
2015/12/29(火) 05:14:17.23 ID:GnldGbIR
486 :
デフォルトの名無しさん
2015/12/29(火) 05:16:02.68 ID:GnldGbIR
>>423 インターフェースとか抽象データ型ってことを理解できてないから、
そう言っただけでは理解できないんだと思うよ。
487 :
デフォルトの名無しさん
2015/12/29(火) 16:41:59.31 ID:+ubDtqOv
488 :
デフォルトの名無しさん
2015/12/29(火) 20:37:04.28 ID:mZCjkrMY
>>485 お前のほうが分かっていないような気がするが‥
489 :
デフォルトの名無しさん
2015/12/29(火) 22:38:58.43 ID:tgd/4Yaw
>>422の「なので、再帰を全て末尾再帰にできるわけではなく」とか恥ずかしいよなw
490 :
デフォルトの名無しさん
2015/12/30(水) 07:30:40.60 ID:hgJXqSbV
>>489 >422 「再帰を全て末尾再帰にできるわけではな」いのは当然だが,どうしてはずかしいんだ?
491 :
デフォルトの名無しさん
2015/12/30(水) 16:36:10.59 ID:GbTfiPvb
> コンパイラが再帰をループに逆変換してくれる機能
恥ずかしい発言はこれだね。
492 :
デフォルトの名無しさん
2015/12/30(水) 17:06:15.23 ID:JfqdTNxj
493 :
デフォルトの名無しさん
2015/12/30(水) 17:07:27.17 ID:WCUOMmTt
掲示板ではレベルのミスマッチがよくあるんだよな。
たとえば、アセンブリと機械語は一対一で対応していると純粋に信じてる人は世の中に結構多い。
そういう人たちとプロセッサのデザイナが掲示板で議論すると当然ミスマッチが起こる。
こういう場合、当然勢力の面でデザイナの方が分が悪くなるね。
世の中、知ったかぶりのバカの方が多いから。
494 :
デフォルトの名無しさん
2015/12/30(水) 17:08:24.47 ID:JfqdTNxj
手動で末尾最適化をしてみればいいんだよ。
そうすれば、なるほど、
これが最適化されたコードなんだな!って
ループになったコードを目の当たりにすることになる。
495 :
uy ◆Qawu9.2l1E
2015/12/30(水) 17:28:38.17 ID:hD2EQx+W
そういう周りくどい事やってるうちは三流
uyの領域に到達すると文章読むだけで理解する
496 :
デフォルトの名無しさん
2015/12/30(水) 17:39:40.10 ID:hgJXqSbV
>>491 コンパイラが再帰をループにしてくれる機能はあるよ,恥ずかしいのはどちら?
497 :
デフォルトの名無しさん
2015/12/30(水) 18:05:13.50 ID:WCUOMmTt
再帰の方が有利なら、わざわざループに変換するなよ。
むしろ、ループを自動的に再帰に変換しろよ。
498 :
デフォルトの名無しさん
2015/12/30(水) 18:08:15.81 ID:Y9esFwyM
>>492 逆変換が意味不明
単に変換なら同意するけど
499 :
デフォルトの名無しさん
2015/12/30(水) 18:35:57.34 ID:WCUOMmTt
テロリストは逮捕されろよ。
500 :
デフォルトの名無しさん
2015/12/30(水) 18:45:12.16 ID:o3pJDHAa
再帰が実用的でなく
ループの方が有利だから
変換しないといけない。
501 :
デフォルトの名無しさん
2015/12/30(水) 18:47:59.10 ID:hgJXqSbV
>>498 それは文脈による,よく逆電圧っていうが実は順電圧だったりすることはあるし
502 :
デフォルトの名無しさん
2015/12/30(水) 19:10:36.15 ID:Y9esFwyM
>>501 > それは文脈による,
だからこの文脈だと意味不明って言ってるんだが
> よく逆電圧っていうが実は順電圧だったりすることはあるし
ますます意味不明
503 :
デフォルトの名無しさん
2015/12/30(水) 19:20:03.93 ID:pyiqU+eC
504 :
デフォルトの名無しさん
2015/12/30(水) 21:43:44.03 ID:c5JPL3VW
分かるように説明できないんじゃ周りは皆分からず屋に見えてしまうね
505 :
デフォルトの名無しさん
2015/12/30(水) 21:56:06.02 ID:WCUOMmTt
我々市民はテロリストを納得させるような言葉を持たない。
従って、テロリスト自ら変わらない限り、テロリストは永遠に市民の敵である。
506 :
デフォルトの名無しさん
2015/12/31(木) 01:15:35.98 ID:+JFM0ZYm
>>496 キミの方だとおもうよ。ぷぷぷ。
「末尾再帰は... コンパイラが再帰をループに変換してくれる機能」
> 末尾再帰は「再帰を末尾再帰で書けば速くなる」というものではなくて
> (単純な)ループを何らかの理由で再帰の形にしないといけない時、
> 末尾再帰の条件を満たすように、ループを再帰に変換すると
> コンパイラが再帰をループに逆変換してくれる機能
507 :
デフォルトの名無しさん
2015/12/31(木) 01:18:23.37 ID:+JFM0ZYm
>>496 それは、「末尾再帰最適化」というコンパイラの機能だね。
508 :
デフォルトの名無しさん
2015/12/31(木) 01:21:18.07 ID:+JFM0ZYm
「ループを再帰に変換すると、コンパイラが再帰をループに逆変換してくれる」
頭沸いてるだろ。ぷぷぷ。最初からループで書いとけよ。
509 :
デフォルトの名無しさん
2015/12/31(木) 02:10:00.81 ID:RPyreEna
そんなんじゃ小説なんか読めないだろう。
読解力なさすぎだよ。
510 :
デフォルトの名無しさん
2015/12/31(木) 02:17:21.09 ID:+JFM0ZYm
読解力が足りないとか言いだしたぞ。このバカ。
> ループを再帰に変換すると、コンパイラが再帰をループに逆変換してくれる機能
511 :
デフォルトの名無しさん
2015/12/31(木) 02:26:21.16 ID:Rb2meO2K
>>490 再帰はすべて機械的に末尾再帰に変換できる。
そんな基本的なことも知らないのは恥ずかしいだろう?
512 :
デフォルトの名無しさん
2015/12/31(木) 02:32:06.38 ID:+JFM0ZYm
おー、すげー。天才現る。
これで、スタックオーバーフロー完全克服だ。
513 :
デフォルトの名無しさん
2015/12/31(木) 02:52:07.07 ID:cXVC2Dha
末尾再帰に変換できるとは言ったが,スタックオーバーフローを回避できるとは言ってない(キリッ
514 :
デフォルトの名無しさん
2015/12/31(木) 03:04:20.45 ID:+JFM0ZYm
クイックソート10000倍高速化とか再帰→末尾再帰の自動変換とか、このスレには天才が多いな。
515 :
デフォルトの名無しさん
2015/12/31(木) 07:33:29.73 ID:Rb2meO2K
CPS変換も知らんのか…
516 :
デフォルトの名無しさん
2015/12/31(木) 09:52:41.50 ID:tmojp+ig
>>510 俺は第三者だ。
俺は書き込んだ奴の言いたいことが容易に把握できている。
それがキミにはできないという。
再帰についてのスレで再帰について書かれているのだから、バックボーンの違いではないだろう。
知識ではなく読解力の問題だ。
こんなもん小学生でも意味をくみ取るぞ。
517 :
デフォルトの名無しさん
2016/01/01(金) 00:50:07.33 ID:PlqvFYu0
>>516 >>422を理解出来てるのか? こりゃすげーわ。
ループを再帰の形にするときに、ループを再帰に変換すると、再帰をループに逆変換してくれるコンパイラの機能が末尾再帰?
>>422が末尾再帰を理解してない事が読み取れるだけだ。
それをお前が読み取れるという事は、同一人物以外あり得ない。
518 :
デフォルトの名無しさん
2016/01/01(金) 00:56:33.12 ID:XLbYQ9mF
そんなんじゃ小説も読めないだろう。
末尾再帰とは、本来ループで書くべきものを再帰で書いた時にコンパイラが
自動でループに直す機能・・・という主張なのだろう。
519 :
デフォルトの名無しさん
2016/01/01(金) 00:57:41.99 ID:PlqvFYu0
>>515 よくいるんだわ。より難解な前提が必要なのに、出来るよって言い出す奴。
520 :
デフォルトの名無しさん
2016/01/01(金) 00:57:43.20 ID:XLbYQ9mF
逆変換という言葉は、そういった前提があって出てくる言葉だと思うぞ。
521 :
デフォルトの名無しさん
2016/01/01(金) 02:37:45.56 ID:mIgzxpKK
コンパイラが最適化してくれるならコンパイラにやらせるのが普通の話だよね
522 :
デフォルトの名無しさん
2016/01/01(金) 08:22:45.99 ID:xWjlSole
523 :
デフォルトの名無しさん
2016/01/01(金) 08:28:26.90 ID:PlqvFYu0
>>520 末尾再帰の説明に「逆変換」を使うってどういう前提だよ www
524 :
デフォルトの名無しさん
2016/01/01(金) 10:18:04.79 ID:TPZeTHW+
>>523 本来ループであるべきものをプログラマが再帰に変換しているので、
コンパイラがループに逆変換するという主張なのだろう。
お前、本当にこの程度の文章が読めないの?
そんなんじゃ小説どころか論文も読めないだろう。
俺は元の文すら読んでいなく、引用されてるのを見てそこまで理解できてるぞ。
もう一度聞くけど、お前本当にこの程度の文が読めないの?
525 :
デフォルトの名無しさん
2016/01/01(金) 11:36:06.33 ID:wTuRpENh
> インバータ(Inverter)とは、
> 直流電力から交流電力を電気的に生成する(逆変換する)電源回路、
> またはその回路を持つ電力変換装置のことである。
> 逆変換回路(ぎゃくへんかんかいろ)、逆変換装置(ぎゃくへんかんそうち)などとも呼ばれる。
逆変換w
526 :
デフォルトの名無しさん
2016/01/01(金) 12:12:39.23 ID:D046Nv8F
>>519 >よくいるんだわ。より難解な前提が必要なのに、出来るよって言い出す奴。
何言ってんだこいつ
527 :
デフォルトの名無しさん
2016/01/01(金) 15:45:58.36 ID:PlqvFYu0
528 :
デフォルトの名無しさん
2016/01/01(金) 15:48:40.55 ID:PlqvFYu0
>>526 読解力が、足りない。
半端な知識を振り回す知ったかぶりが沢山いるという事だよ。
529 :
デフォルトの名無しさん
2016/01/01(金) 16:18:10.88 ID:TPZeTHW+
>>528 それは読解力関係ないだろう。
俺にも全く意味が分からなかった。
何言ってんだコイツ?というのが素直な感想。
530 :
uy ◆Qawu9.2l1E
2016/01/01(金) 19:46:32.52 ID:FqzQpFZg
531 :
デフォルトの名無しさん
2016/01/01(金) 19:53:29.38 ID:BqDq7bML
532 :
デフォルトの名無しさん
2016/01/01(金) 20:37:19.16 ID:KnWw4/o3
今年もrubyのオワコン芸w
533 :
uy ◆Qawu9.2l1E
2016/01/02(土) 03:28:12.35 ID:cdXNgg3P
>>531-532 本当に頭悪いカスだな
rubyに限定せず実装出来ると思うけど技量的に理解すら無理な感じ?
再帰とループの変換や末尾再帰の話題には触れてもここはTCOという単語が今まで一回も出てこないという事実
「知ってる側」からすると嘘をついてるのがすぐにわかってしまう
知ったかぶりのクズ
534 :
uy ◆Qawu9.2l1E
2016/01/02(土) 03:30:31.88 ID:cqMsfgi2
535 :
デフォルトの名無しさん
2016/01/02(土) 09:53:52.00 ID:QH+c5K8j
>>533 だって末尾再帰なんてlisp/schemeでは当たり前だもの,今はgccでも当たり前だし
いまさらrubyですかね‥
536 :
デフォルトの名無しさん
2016/01/02(土) 13:32:29.04 ID:3O/U03ws
むしろ自分でやんないと末尾呼び最適化が利かない処理系って(ry
537 :
デフォルトの名無しさん
2016/01/02(土) 15:04:15.58 ID:QH+c5K8j
なんだか遅れてるんだよねruby屋さんって
538 :
デフォルトの名無しさん
2016/01/02(土) 15:39:39.87 ID:TZBdz3NA
rubyだからね。仕方ないね。
539 :
デフォルトの名無しさん
2016/01/03(日) 22:30:43.03 ID:F57MRPO3
>>533 何度も出てるし「末尾再帰」といった時点でジャンプへの変換という意味を持っていってるんだよ。
最適化が無ければ「末尾」と特別な扱いをする意味が無い。
runyって最近言い出したのか。30年遅れてるな。
540 :
uy ◆Qawu9.2l1E
2016/01/04(月) 03:42:45.74 ID:XM/1Dr6r
理解度が低すぎる
このアルゴリズムはこのスレでは初出だと認識してるけど
読めなくてわけわかんない状態か
さっさと死ねゴミ
541 :
uy ◆Qawu9.2l1E
2016/01/04(月) 03:51:45.48 ID:wtRTZBq6
妥協点でPythonだからね
それ以下の言語でアルゴリズム語ってるスレ見ると
そこで話してる内容とか読む前に
まずはスレ民を学習させる事から初めて
レベルを上げてやらないと話にならない
542 :
デフォルトの名無しさん
2016/01/04(月) 04:13:44.75 ID:u97FRQbx
>>540 末尾再帰のループ最適化は
>>5 や
>>507 ですでに出てきているよ
>>541 最適化の話題なら python や ruby のようなインタプリタではなく
コンパイラで比較するのが適切だね,インタプリタ上で速くなっても
だれもうれしくない.C/C++一択だよ
ま,fortran でもいいが
543 :
デフォルトの名無しさん
2016/01/04(月) 04:55:36.62 ID:WY8liDeA
再帰好きの人をサイキッカーと呼びたい
544 :
デフォルトの名無しさん
2016/01/04(月) 10:03:14.86 ID:hsfrcHKj
いいなそれ
545 :
デフォルトの名無しさん
2016/01/04(月) 12:27:00.00 ID:U406TFbL
再帰好きの人のを中二コーダーと呼びたい
546 :
uy ◆Qawu9.2l1E
2016/01/04(月) 15:06:50.79 ID:KNqXLa56
>>542 理解力なさすぎだな
お前の学校の担任はさぞかし苦労したことだろう
547 :
デフォルトの名無しさん
2016/01/04(月) 16:24:41.19 ID:u97FRQbx
>>546 どんな点をみて「理解力がない」と判断したのか?
説明できますかね,それとも吼えるだけ?
548 :
NAS6 ◆n3AmnVhjwc
2016/01/04(月) 17:38:28.00 ID:7uWOp/tU
つか、末尾再帰ってループそのまんまで再帰の利点ないし
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
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
pushargstack();
popargstack();
ユーザー定義のこれらはめんどくさいから
再帰関数使ってコンパイラ任せにするよ
551 :
uy ◆Qawu9.2l1E
2016/01/04(月) 18:13:29.66 ID:zTvWipKl
またゴミカス初心者が来たけど
また1から説明して教育しなきゃいけないの?
552 :
NAS6 ◆n3AmnVhjwc
2016/01/04(月) 18:16:50.81 ID:7uWOp/tU
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
554 :
NAS6 ◆n3AmnVhjwc
2016/01/04(月) 18:42:48.29 ID:7uWOp/tU
555 :
NAS6 ◆n3AmnVhjwc
2016/01/04(月) 18:55:15.40 ID:7uWOp/tU
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
>>554で、
ループ実装が好きなやつはいないと思うんだけどな
557 :
uy ◆Qawu9.2l1E
2016/01/04(月) 21:13:17.67 ID:KNqXLa56
RubyかPythonで書き直して
C++とかいうゴミいらねーから
558 :
NAS6 ◆n3AmnVhjwc
2016/01/04(月) 21:51:32.16 ID:7uWOp/tU
「{C++規則をかなり抑えてCライク}で書かれたソースコード」
のクロスランゲッジなんて、ほぼ、ライブラリの関数名を書き換えるだけだろ
559 :
NAS6 ◆n3AmnVhjwc
2016/01/04(月) 21:54:46.92 ID:7uWOp/tU
あ、あと制御構文もちゃっちゃっと書き換えれば出来上がり
560 :
uy ◆Qawu9.2l1E
2016/01/04(月) 22:07:47.26 ID:mZvmD2Em
それをなぜ最初から簡潔な言語で書かないで
わざわざ冗長したC++・C言語といった言語でドヤァとソースコード貼りつけてくるのか、理解しがたいんだけど
カスレベルの初心者である事を数レスに渡る自己紹介でもしにきたのかね?
アルゴリズムの抽象化でC++とか使う奴はその時点で初心者だって一瞬で分かるって言ってるのに
自分が知恵遅れだと分かってないままの奴が続々現れるからこういう場所は話題がループする
561 :
uy ◆Qawu9.2l1E
2016/01/04(月) 22:08:20.17 ID:HCl/OTCR
562 :
デフォルトの名無しさん
2016/01/04(月) 22:23:59.40 ID:JpzJLk3f
熱烈なC++アンチって速度要求される場面に出会ったことがないんだろな
もしくはフォートラン信者なんだろな
563 :
デフォルトの名無しさん
2016/01/04(月) 22:31:14.13 ID:OFaVtQHO
オッパイソンはベーシックみたいなもんで非プログラマが使うのに適してるけど、
プログラマが使うには色々しょぼすぎ。
ペイントショッププロのマクロにオッパイソンが採用されたときは、来るかと思ったけど、
それを機に没落していった。
イヌックスの呪いは有名だけど、オッパイソンの呪いもあるのかもしれん。
564 :
デフォルトの名無しさん
2016/01/04(月) 22:35:24.75 ID:OFaVtQHO
しかし、エクセルのマクロ使いはザラにいるのに、他のアプリはマクロ使いが
ほとんどいないんだよな。
イーマックソとか言うウンコは置いといて。
CADなんかマクロの使いであると思うのだが。
Autocadなんかウンコ使いが泣いて喜ぶLisp搭載してるのにな。
なんでだ。
565 :
デフォルトの名無しさん
2016/01/04(月) 22:55:58.31 ID:8iRyCi7U
とりあえずuyがほんとになにもわかってないことだけわかった
566 :
NAS6 ◆n3AmnVhjwc
2016/01/04(月) 23:00:49.51 ID:7uWOp/tU
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
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
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
再帰をループにしたかったら
こういうのをいちいち作らなきゃだめだよ
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
2016/01/05(火) 02:57:13.31 ID:/kPL7pQm
プログラミング半年目くらいだろうかコイツは
多く見積もって1年半
それ以上なら今すぐPC捨てたほうが良いレベル
571 :
デフォルトの名無しさん
2016/01/05(火) 02:58:35.02 ID:3cj4CitF
572 :
デフォルトの名無しさん
2016/01/05(火) 02:59:25.81 ID:CnA8UQLB
死ねカス
573 :
NAS6 ◆n3AmnVhjwc
2016/01/05(火) 06:30:43.49 ID:FnNfbNzM
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
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
#同色上書き塗りつぶし
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
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
#下
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
再帰関数を無理矢理ループで書くことが
正解だなんてとても思えないんだけど・・・
579 :
NAS6 ◆n3AmnVhjwc
2016/01/05(火) 07:57:54.39 ID:FnNfbNzM
>>575-577 はdestにcolorが最初から使われていると、それ以上塗れないバグがあるな
ま、いいか
580 :
NAS6 ◆n3AmnVhjwc
2016/01/05(火) 08:01:46.66 ID:FnNfbNzM
destはコピー先だからそういう条件でクリア済みってことで
581 :
NAS6 ◆n3AmnVhjwc
2016/01/05(火) 08:14:57.62 ID:FnNfbNzM
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
583 :
NAS6 ◆n3AmnVhjwc
2016/01/05(火) 08:48:45.20 ID:FnNfbNzM
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 :
デフォルトの名無しさん
2016/01/05(火) 23:45:47.40 ID:zRwuHMxA
そうだね、グリーンだね。
任意の再帰はスタックを使えばループに書き直せるし、任意のループは末尾再帰で書き表せるけど
書きやすい方で書いたら良いんじゃない?
配列を舐めるだけのループをわざわざ再帰で書く必要はないし、
二分木を舐めるだけの再帰をわざわざループで書く必要はない。
勿論例外は幾つもあるけどね。
585 :
uy ◆Qawu9.2l1E
2016/01/06(水) 01:13:15.45 ID:kZN9AhFE
死ね → NAS6 ◆n3AmnVhjw
586 :
デフォルトの名無しさん
2016/01/06(水) 01:26:34.40 ID:2plodUsJ
587 :
uy ◆Qawu9.2l1E
2016/01/06(水) 05:38:10.76 ID:NwAUbAKq
時間とフィンガーポイントを無駄にしたくない
588 :
デフォルトの名無しさん
2016/01/06(水) 11:44:51.16 ID:Hrty1iRZ
ばいばい
589 :
uy ◆Qawu9.2l1E
2016/01/07(木) 03:29:43.72 ID:VBUUQOGk
MPC
590 :
デフォルトの名無しさん
2016/01/07(木) 14:29:25.41 ID:9s+XESwg
>>589 時間とフィンガーポイントを無駄にしない為に今すぐ2chから立ち去るんだ!
さぁ早く!
591 :
デフォルトの名無しさん
2016/01/07(木) 23:10:34.37 ID:ceukK3gk
またuyが言い負かされてると聞いて
592 :
uy ◆Qawu9.2l1E
2016/01/08(金) 07:36:31.52 ID:37pbuAYe
http://kakaku.com/item/K0000791258/ これを使ってるけど打ちにくい
隙間にゴミが入りにくいキーボードで何か探してくれれば長文レス出来るけど
ゲームもやるから同時押しが出来ないキーボードは使えないんだよ
バッファローのこのキーボード系列は
何故かゲーミングキーボードでもない癖にかなりの同時押しが出来る
お前らもこれくらい社会の役に立ってくれ
593 :
デフォルトの名無しさん
2016/01/08(金) 07:58:14.49 ID:qSmN42Fw
長文レスなんざしなくていいから死ね
594 :
デフォルトの名無しさん
2016/01/08(金) 08:06:15.22 ID:t0B3KsjR
ゲームなどという恥ずかしいご趣味をお持ちのようで
595 :
デフォルトの名無しさん
2016/01/08(金) 12:51:08.30 ID:OGMciHiU
tail callはrecursive callと直行する概念だと理解してないのが何人かいるな
596 :
デフォルトの名無しさん
2016/01/08(金) 12:54:36.23 ID:qoujFuKs
直行てなんやねんwてのが何人もいるな
597 :
デフォルトの名無しさん
2016/01/08(金) 13:19:39.58 ID:39T3KdLp
読みやすい方で書いたらいいんちゃうの?
無理にループにしてソース長くしてテスト項目増やす奴の気がしれんわ
598 :
デフォルトの名無しさん
2016/01/08(金) 13:22:10.55 ID:39T3KdLp
取り敢えずutがカスだってのは旗から見てわかった
補足しておくけどループで済むものを再起にしろと言ってるわけではないからな
599 :
デフォルトの名無しさん
2016/01/08(金) 14:05:20.20 ID:qSmN42Fw
そりゃrecursiveじゃないtail callなんざ幾らでもあるわ
600 :
デフォルトの名無しさん
2016/01/08(金) 14:44:50.10 ID:oo2zXXZh
流し
601 :
デフォルトの名無しさん
2016/01/08(金) 19:53:25.00 ID:XdIzL1DI
仮にもプログラマならHHK使ってます自慢くらいしろよっていう
そういう俺はreal forceだけど。
602 :
デフォルトの名無しさん
2016/01/08(金) 22:36:48.34 ID:ktsgJ36p
603 :
デフォルトの名無しさん
2016/01/08(金) 22:52:34.47 ID:Ydps26p4
ワロタ
604 :
デフォルトの名無しさん
2016/01/09(土) 19:28:51.30 ID:j10t/SxZ
芸能界で生きていけるレベルの芸だな。
605 :
uy ◆Qawu9.2l1E
2016/01/13(水) 15:37:06.33 ID:KvZEN8k1
自分はプログラマじゃないんだよ
目的を最高効率で達成する事を念頭に置いてるスクリプトキディだ
そして複数人でプログラムを組むときに必要なノウハウなんて持ってない
そもそも自分はそういう事をしなくて良いから、生きてく上で必要無い配慮だから
周りが読みにくいとか知った事ではないし
身分がちげーんだよカス
606 :
デフォルトの名無しさん
2016/01/13(水) 16:53:37.49 ID:QjeDGB/s
スクリプトキディの意味も知らないのな
607 :
デフォルトの名無しさん
2016/01/13(水) 16:58:20.95 ID:4eNfFdO0
(他人の作った)スクリプトを使うしか能の無いお子様
正しく自分のこと理解してるということでいいのかもしれないですね。
608 :
デフォルトの名無しさん
2016/01/13(水) 18:34:23.73 ID:QjeDGB/s
正しく自分を理解していたら、あんなバカな生態を晒し続けるわけが無い
スクリプトキディとは、他人の作ったスクリプトでいたずらしてはしゃぐお子様の事だね
609 :
デフォルトの名無しさん
2016/01/13(水) 19:01:27.17 ID:U6rexLyV
にちゃんに
610 :
デフォルトの名無しさん
2016/01/13(水) 19:03:20.75 ID:U6rexLyV
誤送信
2ちゃんに書き込んでる地点で効率最悪といえる
611 :
デフォルトの名無しさん
2016/01/13(水) 21:24:04.62 ID:VbVWsLR9
地点?
612 :
デフォルトの名無しさん
2016/01/13(水) 22:25:51.39 ID:IMboGSkT
数学的な再帰定義関数は好き
プログラムの再帰定義は多少罪悪感が
613 :
デフォルトの名無しさん
2016/01/14(木) 05:26:27.60 ID:uv3Ej0dB
身分は再起する
614 :
デフォルトの名無しさん
2016/01/15(金) 10:47:33.86 ID:u0Mj97aD
>>605 読みやすさを考慮しなくていいとか言うなら、ソースあげんなksが
615 :
デフォルトの名無しさん
2016/01/15(金) 20:31:31.62 ID:POz82VxF
まともなプログラムは再帰使わないて
Javaじゃ標準でhashでもvisitorでも使ってるやん
初心者かな?
616 :
デフォルトの名無しさん
2016/01/15(金) 20:52:05.45 ID:DNDI2k7a
>>615 ウェブサイトがハッキングされるのはそのせいかもしれませんね。
617 :
デフォルトの名無しさん
2016/01/15(金) 20:59:16.36 ID:POz82VxF
ワロタ
何別人ぶってるんだコイツ
618 :
デフォルトの名無しさん
2016/01/15(金) 21:40:58.93 ID:bARE8Ecx
Javaがまともじゃないとか何様だよ
619 :
デフォルトの名無しさん
2016/01/15(金) 22:51:22.58 ID:DNDI2k7a
Haskellを知ればJavaなんぞ子供のおもちゃにも及ばない。
620 :
デフォルトの名無しさん
2016/01/15(金) 22:52:36.63 ID:nz6sd5//
でも cloujure が気になるのです‥
621 :
デフォルトの名無しさん
2016/01/16(土) 20:53:37.66 ID:mv0cs2FW
データベース扱いにくいゴミ
622 :
デフォルトの名無しさん
2016/01/16(土) 22:18:41.95 ID:8IHN4wdz
データベースは扱いにくいゴミだそうです。
623 :
デフォルトの名無しさん
2016/01/17(日) 15:36:45.95 ID:LBaM8j14
いや、もしかしたら
データベースを扱うのに困難を伴うゴミ人間って意味かも
624 :
デフォルトの名無しさん
2016/01/17(日) 18:00:23.51 ID:UWpoaTz9
もしかして、もしかしてだけどさ、Haskelのこと言ってるんじゃね?
625 :
デフォルトの名無しさん
2016/01/18(月) 05:28:47.91 ID:lC5RiWYz
Haskellほどデータベース扱いやすい言語も少ないからそれはない
626 :
デフォルトの名無しさん
2016/01/18(月) 20:02:16.24 ID:DTRfKFLk
世界一のデータベースを持つと言われるGoogleがHaskellで動いているくらいだからね。
627 :
デフォルトの名無しさん
2016/01/18(月) 20:42:43.12 ID:1d5YkXP9
Haskellって実用で使われてんのかw
おもちゃかと思ってたわw
628 :
デフォルトの名無しさん
2016/01/19(火) 15:31:29.42 ID:py3nDmvs
おもちゃだよ
Googleのおもちゃ
629 :
デフォルトの名無しさん
2016/01/19(火) 21:26:53.35 ID:C1tOs2Eu
この世はおもちゃで十分
630 :
デフォルトの名無しさん
2016/01/20(水) 12:31:10.14 ID:K5mS7ftq
2ちゃんは漏れらのおもちゃ
631 :
デフォルトの名無しさん
2016/01/20(水) 17:52:59.34 ID:Evm4j3E4
漏れらとか使う香具師久しぶりに見たわ
632 :
デフォルトの名無しさん
2016/01/20(水) 19:02:11.21 ID:aKBKow0I
イッテヨシとかギコはにゃーんとかもう死語なんだろうな。
ゴルァはまだありかな。
633 :
デフォルトの名無しさん
2016/01/21(木) 12:48:08.73 ID:zpe1QHZ3
ヌルポにはガッっていうのはなぜだったのか理由がいまだに判らないので
香具師にどう反応すればいいのかも判らない
634 :
デフォルトの名無しさん
2016/01/21(木) 23:38:12.84 ID:C4EemGup
>>633 ぬるぽにかぎらず、例外発生したら、ガッ!
635 :
デフォルトの名無しさん
2016/01/22(金) 01:18:00.03 ID:G5rv7JJ3
>>633 NullPointerExceptionをぬるぽと呼ぶスレだかなんだかいうスレタイのスレが立った2分後に
2が1にガッしたから
だった筈
636 :
デフォルトの名無しさん
2016/01/22(金) 11:22:37.47 ID:vIHZAGQE
ヌルポ
637 :
デフォルトの名無しさん
2016/01/22(金) 17:22:39.92 ID:AzZButyZ
たたき続けなさい
さすればヌルポは失せるでしょう
638 :
デフォルトの名無しさん
2016/01/23(土) 18:27:15.12 ID:TOjqi36j
639 :
デフォルトの名無しさん
2016/01/23(土) 18:56:26.79 ID:0d2orZXz
640 :
デフォルトの名無しさん
2016/01/31(日) 18:53:58.36 ID:N9Aq8poo
641 :
デフォルトの名無しさん
2016/01/31(日) 21:42:25.99 ID:OzonL4m2
ガッはガッチャの略だろ。 ガッチャマンでお馴染みのガッチャはI have got you.の略で捕まえたとかの意味。
642 :
デフォルトの名無しさん
2016/02/01(月) 01:42:44.99 ID:IP+vl4xQ
でもアメリカのドラマ見てると了解するときにガッチャ!って言ってるよね。
特にチャーリーズエンジェルのカエル顔が(別のドラマでも)言ってるような気がする。
643 :
デフォルトの名無しさん
2016/02/19(金) 20:26:15.94 ID:wEwKzS1i
再帰使うとエラーの予測が立てにくい
644 :
デフォルトの名無しさん
2016/02/19(金) 22:00:01.71 ID:eeiEIdAh
それ再帰のせいじゃなくてもともと難しいアルゴリズムなんじゃ
645 :
デフォルトの名無しさん
2016/02/19(金) 22:04:28.48 ID:jxx0XdOv
再帰の方が簡単に難しいアルゴリズムを作れる
646 :
デフォルトの名無しさん
2016/02/19(金) 22:41:27.96 ID:wEwKzS1i
同じコードでも言語やバージョンの違いで即死する可能性があるのがネック。
可能ならwhileにするよ。
どうでもいいスクリプトなら木にしないけど。
べ、別に再帰関数苦手なわけじゃないんだからね!
647 :
デフォルトの名無しさん
2016/02/24(水) 00:10:47.14 ID:i1Xglt1a
再帰否定する奴は局所変数も否定すんの?
648 :
uy ◆Qawu9.2l1E
2016/02/25(木) 06:44:19.41 ID:loCQbBq3
再帰否定派は生きるのがつらいんだよ
いつも周りのもの何もかも否定してるよ
649 :
デフォルトの名無しさん
2016/02/25(木) 12:35:19.93 ID:tc7lGvfi
無限か有限かを判別するだけでも難しい再帰コールが簡単に作れるからな
650 :
デフォルトの名無しさん
2016/02/25(木) 22:13:06.90 ID:OuMkr9Sq
ループなら無限か有限か簡単に判別できるとでも?
651 :
デフォルトの名無しさん
2016/02/26(金) 03:25:44.03 ID:VdCPJ0Vc
再帰の方が簡単に作れる
652 :
デフォルトの名無しさん
2016/02/26(金) 03:33:16.76 ID:VdCPJ0Vc
例えば再帰を使えばC++149文字で数学的に非常に判別が難しいコードが作れる
ステップ数がF_φ_ω(0) (n)のオーダー
再帰を使わないともっとずっと必要な文字数は増える
653 :
デフォルトの名無しさん
2016/02/26(金) 12:24:24.63 ID:x5+an1W2
つまり再帰を使うと簡単に分かりにくいコードが書けてしまうというアピール
アホなのこいつ?
654 :
デフォルトの名無しさん
2016/02/26(金) 12:55:19.99 ID:V8jyQAYV
まともなプログラマーしかいなけりゃ問題ないよ
655 :
デフォルトの名無しさん
2016/02/26(金) 20:22:01.88 ID:KBsVtPlI
適材適所
まぁ、ループは現代ではほとんど高階関数に置き換えられてはいるが
656 :
デフォルトの名無しさん
2016/02/26(金) 20:31:47.39 ID:VdCPJ0Vc
そうか?
657 :
デフォルトの名無しさん
2016/02/27(土) 09:47:03.89 ID:GGk6IaQQ
再帰、ループ、高階関数は互いに別カテゴリーの概念だけどな。
658 :
デフォルトの名無しさん
2016/02/27(土) 13:35:50.10 ID:wN2C/qqy
>ループは現代ではほとんど高階関数に置き換えられてはいるが
mapとかfoldって言いたいの?
659 :
デフォルトの名無しさん
2016/02/29(月) 09:52:02.11 ID:+UQXiICf
ファンクショナルのことだろ
660 :
デフォルトの名無しさん
2016/02/29(月) 12:09:46.90 ID:gY4tu7UX
Yコンビネータの事かも
661 :
デフォルトの名無しさん
2016/03/05(土) 08:19:26.32 ID:C1oJ0ySj
最近の言語は分かり易いから好んで使う人多いみたいだね。
俺はダメだわ。単純な再帰でもアセンブラ時代の間接修飾と再帰を混合で使ってたときのトラウマが・・・
662 :
デフォルトの名無しさん
2016/03/05(土) 13:03:33.56 ID:4AspLwzf
スタック使うから組み込みでは禁則かな
663 :
デフォルトの名無しさん
2016/03/05(土) 16:01:56.83 ID:Xc1YGBo+
末尾呼びにすればぁ?
664 :
デフォルトの名無しさん
2016/03/06(日) 13:58:13.11 ID:9mzH85Ox
無理して使う物ではないのは、確か。
665 :
デフォルトの名無しさん
2016/03/07(月) 19:41:03.81 ID:0qoaCMqF
666 :
デフォルトの名無しさん
2016/03/07(月) 20:15:13.20 ID:X8YwrOCo
>>665 ループ,というよりは map によるメモ化を先にするべきかと思う
667 :
デフォルトの名無しさん
2016/03/07(月) 20:44:00.00 ID:ouSCK2N5
アッカーマンメモ化はやめとけ
メモリ使用量がシャレにならん。
小さい引数ならいいけど。
668 :
デフォルトの名無しさん
2016/03/07(月) 23:04:02.15 ID:ouSCK2N5
と思ったけどスタック消費量は逆に減る?
よくわからんくなってきた。
669 :
デフォルトの名無しさん
2016/03/07(月) 23:55:21.18 ID:DhnnCcYX
670 :
デフォルトの名無しさん
2016/03/08(火) 06:31:35.48 ID:mBS7w7C0
しかしヤッターマンならきっとやってくれる
671 :
デフォルトの名無しさん
2016/03/09(水) 19:45:38.58 ID:8kThrIH6
672 :
デフォルトの名無しさん
2016/03/15(火) 20:46:33.65 ID:Ar6pzjDU
メモ化とかメモリリークしてるに等しい欠陥技術でしょ。
673 :
デフォルトの名無しさん
2016/03/15(火) 20:54:37.80 ID:RIoPtDsj
>>672 fjの昔からの議論をここで蒸し返しますか?
674 :
デフォルトの名無しさん
2016/03/25(金) 20:10:31.18 ID:ARWxn+lM
再帰というソフトにはスタックというハードがあるけどほかのソフトをハードで実装するのはどうなの?
GCとかハードで実装してまったくフリーズなしに出来ないの?
675 :
デフォルトの名無しさん
2016/03/27(日) 16:40:13.75 ID:WR+Y3fPV
int main(){return main();}
676 :
デフォルトの名無しさん
2016/03/31(木) 20:21:06.47 ID:qF1fcJk9
とある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
rubyはcで書かれているんやで知らんかったやろ?
678 :
デフォルトの名無しさん
2016/03/31(木) 20:35:19.21 ID:qF1fcJk9
そういう等価じゃなくて文法的にというか。
Cだと$fと$gの型をどうしていいかわからん。
679 :
デフォルトの名無しさん
2016/03/31(木) 21:08:44.15 ID:qF1fcJk9
グローバル変数じゃなくてもこれでいけるっぽい
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
typedef void *(*F)()でいいやんけ
681 :
デフォルトの名無しさん
2016/03/31(木) 21:15:14.22 ID:qF1fcJk9
まじで
やってみる
682 :
デフォルトの名無しさん
2016/03/31(木) 21:20:03.99 ID:qF1fcJk9
やりかたわからん。
コンパイル通るソースプリーズ
683 :
デフォルトの名無しさん
2016/03/31(木) 21:36:59.68 ID:+v8smRGz
これでいけるやろ
#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 :
デフォルトの名無しさん
2016/03/31(木) 21:42:19.47 ID:qF1fcJk9
g++だとエラーになるんだが。
コンパイラは何で確認した?
685 :
デフォルトの名無しさん
2016/03/31(木) 21:46:42.36 ID:+v8smRGz
なんでいきなりg++やねんw
これ以上はcの質問スレでもいって聞けタコ
686 :
デフォルトの名無しさん
2016/03/31(木) 21:55:26.05 ID:qF1fcJk9
なんだ、結局コンパイル通ってないのか
687 :
デフォルトの名無しさん
2016/03/31(木) 22:06:32.37 ID:+v8smRGz
通るわアホw
つーかそんなレベルでよくその質問出来るなお前
688 :
デフォルトの名無しさん
2016/03/31(木) 22:09:21.97 ID:qF1fcJk9
だからコンパイラは何つかったんよ。
こっちでも確認するから教えれ。
有料コンパイラだったら諦めるけど。
689 :
デフォルトの名無しさん
2016/03/31(木) 22:22:46.20 ID:qF1fcJk9
まあ、C質問スレにもマルチしてみるわ
690 :
デフォルトの名無しさん
2016/03/31(木) 22:23:23.28 ID:X8/ytHGi
691 :
デフォルトの名無しさん
2016/03/31(木) 22:34:22.91 ID:qF1fcJk9
>>690 ふーむ確かに。
コンパイラがC++だといかんの?
692 :
デフォルトの名無しさん
2016/03/31(木) 22:49:44.78 ID:qF1fcJk9
キャストすればいいのか
693 :
デフォルトの名無しさん
2016/03/31(木) 22:50:45.57 ID:qF1fcJk9
しかしvoid * はなにか負けたような気分になるなw
694 :
デフォルトの名無しさん
2016/03/31(木) 23:19:06.00 ID:rR3RT0GR
キャストが嫌ならちゃんと型定義すればいいじゃん
と思ったがちゃんとやるには自己参照型定義みたいなのが必要になるのか
Cでそれってできるのかな
関数型Fのポインタを返す関数型をFと定義
695 :
デフォルトの名無しさん
2016/03/31(木) 23:22:26.42 ID:qF1fcJk9
696 :
デフォルトの名無しさん
2016/04/01(金) 00:06:13.07 ID:hr4pCajV
お前はその前に悩むべき問題が山程あるだろw
697 :
デフォルトの名無しさん
2016/04/01(金) 03:40:11.25 ID:0hX+vVN6
voidにキャストがどうのって、rubyでコード書くような奴に言われてもなぁ。
698 :
デフォルトの名無しさん
2016/04/01(金) 22:07:22.21 ID:8s2Zo6V8
>関数型Fのポインタを返す関数型をFと定義
これ定義できる静的型言語ってあるの?
それとも本質的論理的に矛盾した型であって、どうやっても定義できないの?
699 :
デフォルトの名無しさん
2016/04/06(水) 03:07:16.94 ID:0S+muf67
Forループは正直見た目が汚らしい
場合にもよるんだろうけど、再帰で書けるならそっちのほうがコードが綺麗になる
700 :
デフォルトの名無しさん
2016/04/06(水) 12:22:11.84 ID:N51toXoc
いかにもルビイバカらしい考え方だな
701 :
デフォルトの名無しさん
2016/04/06(水) 19:04:18.80 ID:H8hE7WlY
なんでルビイなんだ?
ハスケルバカならまだわかるが。
702 :
デフォルトの名無しさん
2016/04/06(水) 23:26:38.04 ID:UScN8EXw
るびいもはすけるもよく知らないんでしょ
703 :
デフォルトの名無しさん
2016/04/14(木) 21:05:36.57 ID:Lg/h7ZOX
Y = λf.(λx.f (x x)) (λx.f (x x))
704 :
デフォルトの名無しさん
2016/04/14(木) 22:00:43.41 ID:Lg/h7ZOX
#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 :
デフォルトの名無しさん
2016/04/23(土) 00:44:20.59 ID:voC0Rj8b
ピクセルシェーダーで再帰関数使えるようになるのはいつだろうか
706 :
デフォルトの名無しさん
2016/04/24(日) 20:32:40.26 ID:Y7E1SWkm
CPUがGPU化するのが先かGPUがCPU化するのが先か。
まあ超並列プログラムは憧れるけどね。
707 :
デフォルトの名無しさん
2016/04/26(火) 20:14:03.31 ID:ymr+ysub
main = putStrLn $ q ++ show q where q = "main = putStrLn $ q ++ show q where q = "
708 :
デフォルトの名無しさん
2016/04/27(水) 01:24:44.62 ID:Pvz0UkFG
超並列はどうしてもデータレースが怖いからハードウェアトランザクションは必須だな
709 :
デフォルトの名無しさん
2016/04/28(木) 20:33:07.32 ID:B776VxzF
ツクツクボウシの鳴き声を一番正確に表せた奴が優勝 [無断転載禁止]©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
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
匿名通信(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
眠い時にプログラム書いてたら1つの関数の中にこれでもかと再帰を詰め込んだモンスター関数を書いてしまって訳が分からなくなる
713 :
デフォルトの名無しさん
2016/05/09(月) 20:57:03.75 ID:QYIZFGji
アッカーマン関数はただの再帰じゃないらしいけど、
再帰のパワーを究極まで高めたら何になるの?
714 :
デフォルトの名無しさん
2016/05/10(火) 14:12:08.45 ID:zxnDb8j/
チューリングマシンになる
証明:以下より明らか
・再帰を用いて、スタックとループをそれぞれ構築できる
・スタック2つとループを用いて、チューリングマシンを模倣できる
・故に、再帰の能力はチューリングマシン以上である。
・一方で、チューリングマシンを用いて再帰を表現出来る
・よって、再帰はチューリングマシンと等価である。
# ツッコミ待ち
715 :
デフォルトの名無しさん
2016/05/10(火) 22:44:58.13 ID:HO4tbZvB
突っ込み待ちというかそんなに間違ってなくない?
716 :
デフォルトの名無しさん
2016/05/11(水) 19:52:51.98 ID:+rpbSEWz
なんで再帰がどうこうで喧嘩してるんだこいつらw
717 :
デフォルトの名無しさん
2016/05/11(水) 20:12:13.79 ID:LnJQmy5e
グッドスタイン数列というのがペアノ算術の限界を超えた再帰という話があるらしいのだが、詳しいことはよくわからない。
でもロマンを感じる。
718 :
デフォルトの名無しさん
2016/05/19(木) 19:24:04.68 ID:eYV7veAj
女性限定、恋愛相談サイトオープン。
4000名のイケメンカウンセラーが在籍中♪
自己紹介動画はいつでも見放題です!
メンガ って検索してください
※本当のサイト名は英字です
719 :
デフォルトの名無しさん
2016/06/19(日) 18:09:53.79 ID:SmadYZ7Z
最近再帰好きだわ
720 :
デフォルトの名無しさん
2016/06/19(日) 20:03:06.77 ID:d2BELKj/
ダジャレ?
721 :
デフォルトの名無しさん
2016/06/19(日) 20:41:14.58 ID:N0SKT7vZ
>>719 そう言う時期が俺にもあったな...(遠い目)
722 :
デフォルトの名無しさん
2016/06/19(日) 21:07:57.12 ID:OFyR5xSG
再帰で実装した方がスッキリするケースってなかなか出てこないから最近全く使ってないや
723 :
デフォルトの名無しさん
2016/06/20(月) 12:26:15.09 ID:xPaMOXBK
再起なんてバグの温床だからなぁ
マインスイーパー作る時ぐらいしか使わない
724 :
デフォルトの名無しさん
2016/06/20(月) 19:47:38.77 ID:YaidyggX
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 :
デフォルトの名無しさん
2016/06/20(月) 23:20:34.02 ID:Lsa8y5Hv
パイ焼きか?
何秒で計算できんの?
726 :
デフォルトの名無しさん
2016/06/20(月) 23:52:55.90 ID:YaidyggX
$ time ./pi >/dev/null
./pi > /dev/null 0.40s user 0.00s system 99% cpu 0.400 total
一瞬やね(最適化 -O)
ちなアルゴリズムはRubyのソースについてるやつから持ってきた
727 :
デフォルトの名無しさん
2016/06/27(月) 22:23:07.70 ID:99UKpQvj
深さ優先探索より幅優先探索が好きだ。
重複がある場合計算量が深さより有利だし、
メモリモリモリ積んでゴリゴリ問題を制覇する感じがたまらない。
728 :
デフォルトの名無しさん
2016/06/28(火) 10:17:41.97 ID:yMD5BWvc
幅優先探索の絶対見つかる感は異常
729 :
デフォルトの名無しさん
2016/07/18(月) 23:29:48.39 ID:v2MXNS7u
まだ再帰一回しか使ったこと無いな。
ループでもよかった感じしたけど