なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net (914レス)
1-

1
(1): 2015/11/28(土)18:51 ID:Rc2MJzM/(1) AAS
なあ、再帰関数好きな人いる?
788: 2016/11/15(火)14:10 ID:NKQgq3zn(3/3) AAS
>>779-782
789: 2016/11/15(火)15:51 ID:jLBcnaY6(3/3) AAS
アイヤー!
790
(2): 2016/11/15(火)20:24 ID:vYoawJH3(1) AAS
>>779
外部リンク:codepad.org
外部リンク:detail.chiebukuro.yahoo.co.jp
791: 2016/11/16(水)02:58 ID:fzskfnoe(1) AAS
codepadって年はでないのか
792: 2016/11/16(水)22:36 ID:1lDDb3P+(1) AAS
ヒープだろうが、スタックだろうが、メモリサイズが有限である以上、
オーバーフローは起こるわな。 馬鹿には永遠に判らんだろうけど。
793
(3): 2016/11/17(木)11:34 ID:u2Ucvcf0(1/5) AAS
情報を保存しながら、進むならば、ループだっていつかオーバーフローする。
保存せずに計算できるならば、再帰でもオーバーフローしないかもしれない。
794
(1): 2016/11/17(木)11:37 ID:uGSslZRu(1/2) AAS
誰かの口真似したのかもしれないけどそれは完全に間違ってますよ
795: 793 2016/11/17(木)11:44 ID:u2Ucvcf0(2/5) AAS
>>794
上の行? 下の行? それとも両方?
796
(1): 2016/11/17(木)12:42 ID:uGSslZRu(2/2) AAS

797
(3): 793 2016/11/17(木)13:03 ID:u2Ucvcf0(3/5) AAS
>>796
Prologですから再帰述語で関数ではありませんが、

repeat :- 割り込みあり,!.
repeat :- repeat.

の場合、スタックの一番上でpop,pushを繰り返すことが可能なのではないでしょうか。
798: 797 2016/11/17(木)13:06 ID:u2Ucvcf0(4/5) AAS
すみません。まちがえました。これではrepeat内でのループになってしまって
Prologのrepeatになりませんでした。分かり難くなりますから割り込みを外します。

repeat.
repeat :- repeat.
799: 793 2016/11/17(木)13:16 ID:u2Ucvcf0(5/5) AAS
>>797 だと、
繰り返しを最終回にするための割り込みとしたかったのですが、
実行開始の遅延を終了するための割り込みになってしまっています。
800
(1): 2016/11/21(月)07:42 ID:Z9LRReIl(1) AAS
>>797
どういう条件だとスタックが伸びず、伸びることが不可避なのはどんな場合か。
801
(1): 2016/11/21(月)09:29 ID:IXIwDt6r(1) AAS
>>800
実行時、述語の最後の節で、最後の副目標(サブルーチン呼び出しにあたる)に差し掛かった時に
その節のそれまでの副目標が全て決定性(別解があり得ない)に終了しているという条件で、
この節の呼び出し時点までスタックを戻って、そこに新たな再帰呼出しの情報を積むことができる。
802: 2016/11/21(月)11:07 ID:3zR4lbui(1) AAS
>>801
条件が良すぎる・・・
803: 2016/11/21(月)21:05 ID:vOYVrbrF(1) AAS
>>790
で完璧な回答をみせたはずだが
804: 2016/11/21(月)22:27 ID:rblSsrUw(1) AAS
好きか嫌いかで言ったら好きだ
趣味以外では使わないけど
805: 2016/11/21(月)23:45 ID:7dMNwwBf(1) AAS
当然、趣味限定だね
806
(1): 2016/11/22(火)08:09 ID:sAluFFeZ(1/3) AAS
再帰がスタックを積むんじゃなくて関数がスタックを積むんちゃうの?
スタックがなければ実現不可能な処理なら、ループで実装してもスタック積むんちゃうの?
807: 2016/11/22(火)11:35 ID:Pvp5yOqg(1) AAS
スタックって言ってもメモリはリニアなんだぜ
808
(1): 2016/11/22(火)12:37 ID:flYh+8oO(1) AAS
>>806
ループで実現したときはスタックに積まれない。
809: 2016/11/22(火)13:14 ID:XwCH+1ok(1) AAS
>>808
実行系に頼らず自分でスタックを実装するってこどだろ
使用メモリ量が不定なのは一緒
810: 2016/11/22(火)13:44 ID:sAluFFeZ(2/3) AAS
スタックが摘まれないなら別物でしょう
811
(1): 2016/11/22(火)13:48 ID:sAluFFeZ(3/3) AAS
抽象概念が実体であるかのような基準で話をする人が多すぎる
再帰でスタックが発生するならそれに対比するループも必ず同等のスタック量が発生する。
それでも 「ループで実現したらスタックは積まれない」と言うのなら、それは実現できていない。

抽象概念としての名称は便宜上再帰であるかループであるかの違いはあるが、実体としての処理は必ず同等。
812: 2016/11/22(火)20:27 ID:dPiI/ZMV(1) AAS
>>790
で完璧な回答をみせたはずだが
813
(3): 2016/11/26(土)09:43 ID:cQHpTyuw(1/2) AAS
>>811
再帰は、入れ子状の関数呼び出しで、呼び出す関数は全部同一だから、
コードは一つで良い。しかし、関数だから呼び出す度にスタックに情報を積むし、
戻ってくるまで、積んである情報をPOPできない。
ただし、関数が末尾に有る時、則ち、戻って来た情報に対して何らかの計算をしてから
情報を返すということがない関数に関しては、戻ってきた値を直接自分の戻す値に
できるわけだから、呼びだされた時の普通なら積む情報を積まずに済ませることが
できるかも知れない。こういうことを「実体」というのですないか?
814: 813 [save] 2016/11/26(土)09:45 ID:cQHpTyuw(2/2) AAS
すみません。最後
こういうことを「実体」というのではないか?
です。
815: 2016/11/26(土)12:00 ID:S9oyLAu3(1) AAS
>>813
なんでも継続
外部リンク[html]:practical-scheme.net
816: 2016/12/10(土)03:10 ID:bw+AbQq7(1) AAS
>>813
根本的には処理もデータも区別なく実体ってことでしょ。
ループ自体も関数自体も実体。
817: 2016/12/18(日)21:34 ID:DsS1XQkJ(1) AAS
なあ、継続好きな人いる?
818: 2016/12/21(水)13:12 ID:gV9REQs2(1) AAS
ああ例外出たらすぐ継続押すよ
819
(1): 2016/12/22(木)22:15 ID:vkr4xxpW(1) AAS
継続は再帰ほど市民権得てないからなぁ。
継続を深く理解しているプログラマは全体の1割に満たないんだろうな。
820: 2016/12/22(木)23:45 ID:LE7ZUwY5(1) AAS
単純に継続を保証してる言語が少ない
821: 2017/01/03(火)17:56 ID:bj+lJcSh(1) AAS
物自体の実在性を議論してんのかよ
やっぱ再帰って難しいわ
822: 2017/01/03(火)18:36 ID:YhXp5fO+(1) AAS
不具合っぽい
外部リンク[html]:hatenachips.blog34.fc2.com
823: 2017/02/11(土)02:50 ID:JwDD7IDr(1/2) AAS
私は再帰の塊のようなプログラムを作ったことがある。
DirBaseだ。
起動後のウィンドウにエクスプローラからファイルやフォルダを
ドラグ&ドロップするだけで簡単にツリーができる。
DirBaseで検索すれば、ダウンロードできる。
824: 2017/02/11(土)02:54 ID:JwDD7IDr(2/2) AAS
DirBaseのダウンロード先
外部リンク:www10.plala.or.jp
825: 2017/02/16(木)15:31 ID:VWTLMYuE(1) AAS
競プラではforループが盛んらしいが、言語開発者としては再起の方が使って欲しい
ソースは俺が今朝見た夢
826: 2017/03/10(金)23:51 ID:Ra0Xudwq(1) AAS
おまえらBrain f**kでも再帰できんの?
827: 2017/09/21(木)16:49 ID:na02B6ss(1) AAS
>>819
ん?setjmp/longjmp のことですか?
828: 2017/10/03(火)20:26 ID:GaATZUfo(1) AAS
(数値計算を主体とする)関数では使わないけど、
再帰ルーチンで使用頻度が激しいのは、外部記憶装置を含めた初期化ルーチン。
一つのルーチンで、内部記憶(主記憶装置)と外部記憶(HDD等)の出入りを管理している場合に、
初期化ルーチンで外部記憶が存在しない場合には、ルーチンで保存している定数を読みだして、外部記憶に保存する。
初期化ルーチンからの定数の読み出し・外部への保存が再起処理。
初期化ルーチン以外では使わない手法。
分割して作成すると、何年か後に見直した時に、どのように初期化しているのかわからない、という事態になることが多発したので、
初期化が必要な場合には、このような手法で同一ルーチン内に収めるようにした。

もっとも一番利用頻度の高いのは、Winでは、ダイアログボックスのプロシージャ。再起の塊で、何をしているのかわからなくなってくる。
829: 2018/01/28(日)06:23 ID:GN9YKPqU(1/3) AAS
再帰プログラムは関数の呼び出しで積みあがるスタックを配列とみなせば、ループアルゴリズムそのものだ。
830: 2018/01/28(日)06:51 ID:GN9YKPqU(2/3) AAS
ファイルやフォルダ、ダイアログやウインドウは階層構造で構成されるので、再帰プログラムを使うのが一般的だ。
831: 2018/01/28(日)15:26 ID:Erw8GBm0(1) AAS
再帰って何?って頃から普通に再帰使ってたからなあ。
自分自身を呼び出せば良いじゃんみたいな。

高校で数列とか演繹法が得意だったせいかも。
自然に使ってた。
832: 2018/01/28(日)16:28 ID:C2Jb//yt(1) AAS
再帰云々言ってるのは大昔のFORTRANとかCOBOLを使ってた人ぐらいじゃないのかな
あと組み込みとかでスタックサイズが厳しい環境で組んでるとか
833: 2018/01/28(日)17:26 ID:OfpblgeM(1) AAS
スタックサイズが厳しい環境で再起???
834: 2018/01/28(日)18:03 ID:GN9YKPqU(3/3) AAS
再帰プログラムの基本はスタックにデータを入れ積み上げていく過程と、スタックからデータを取り出しスタックをクリアしていく過程の二つの動作しか基本的にない。
データを取り出したら、そのデータを使ってプログラミングされた処理を実行する。スタックはデータを貯めることと同時に処理の順番を決めている。再帰のプログラミングには二つの概念が必要だ。
835: 2018/02/12(月)05:25 ID:P5QW/rJt(1) AAS
再帰関数大好きですよ 美しい
836: 2018/02/23(金)11:23 ID:cixhX8OH(1/2) AAS
javaで再起処理書いたらガーベッジコレクションが掃除してくれるもんだと思ってたけど違うの?
十年前の記憶だから曖昧ですまない
cpu使用率が100%になるけど影響ないから使ってます〜って顧客に言われたのを思い出したもんやで
837: 2018/02/23(金)11:24 ID:cixhX8OH(2/2) AAS
再帰だった
838: 2018/02/23(金)12:18 ID:E8zJnigo(1) AAS
影響ないなら気にすんな
839: 2018/05/23(水)20:21 ID:Au5e7VGg(1) AAS
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

980U0
840: 2018/07/05(木)01:23 ID:RfoszcD2(1) AAS
TB1
841: 2018/08/22(水)21:16 ID:mHU9sjBy(1) AAS
今時スタックオーバフローぐらいでOSは死なないから大丈夫
842: 2018/08/23(木)09:46 ID:n+qAvZtC(1) AAS
スタックオーバフローならアプリは落ちちゃう
843: 2018/08/24(金)14:39 ID:1snHtaDM(1) AAS
末尾再帰すればいいじゃない。
844: 2018/11/14(水)23:02 ID:ur2RK8H0(1) AAS
再帰アルゴリズムはなるべくライブラリで隠蔽して欲しいな。
自分で書くのはまだしも他人の再帰コードを読むのはかなり嫌。
845: 2018/11/15(木)12:26 ID:yIPB3Fsn(1) AAS
好きなんか嫌いなんかハッキリしろや
846: 2018/11/15(木)16:20 ID:PG86imds(1) AAS
末尾再帰は結局ただのループ
847: 2018/11/15(木)16:22 ID:zCiKr9uf(1) AAS
再帰関数と言えばアッカーマン関数とかたらい回し関数などが
有名ですが他にも何かある?
848: 2018/11/15(木)21:36 ID:sS26qanx(1) AAS
有名じゃないからwどんな入りかたしたんおまえw
849: 2018/11/16(金)07:45 ID:Q+Zstbtj(1) AAS
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で実装しています。
外部リンク:qiita.com
850: 2018/11/16(金)23:40 ID:HodhQ/sE(1) AAS
問) 再帰的にオマンコを定義せよ
851: 2018/11/16(金)23:59 ID:xavUeX/s(1) AAS
再帰関数『終わらないドラゴンクエスト』

ドラゴンクエストとは?(){
   ドラゴンクエストとは?()
}
852: 2018/11/17(土)00:12 ID:eQWBxdMf(1) AAS
正直小学生のガチネタにはついていけん
853: 2018/11/17(土)03:28 ID:corCuJCM(1) AAS
def DQ(n)
 puts "DQ #{n}"
 DQ(n+1)
end
854: 2018/11/17(土)10:42 ID:B4GISbTr(1) AAS
({})
855: 2018/12/16(日)22:50 ID:EHgXXRnO(1) AAS
バブルソート中
856: 2018/12/16(日)22:56 ID:/PxsPleo(1) AAS
外部リンク:xn--4gq15ldsheocf87g9uc.com
857: 2018/12/18(火)11:28 ID:/M0/bFGF(1) AAS
グロ中尉
858
(1): 2019/03/20(水)19:02 ID:DvYG4dOj(1) AAS
>>1
好き嫌いの問題じゃないと思うが、理論上再起かそれと同等の内部処理履歴を残さないと実現できない処理なら、使うだろう
再起にならざるを得ない具体的な数学(科学)的な条件は忘れたが、けっこう複雑な処理じゃない限り再起じゃなくても実現できたように思う
859
(1): 2019/03/21(木)01:23 ID:b2sujHog(1) AAS
>>858
「再起」じゃなくて「再帰」ね

スタックを使えば、つまりメモリを余分に使用することを認めれば
再帰はループに書き換えることができるから
再帰でなければ出来ないことは原理的に存在しない

更に言えば関数を受け取りまた返す高階関数があれば
いわゆる不動点演算子に相当するものが書けるので
関数の再帰的定義は不要になる
860: 2019/03/21(木)03:46 ID:v9ozWdAP(1) AAS
論理的にはクイックソートよりマージソートが好き。
実用性はクイックソートが上なのかな?
861
(1): 2019/03/21(木)08:59 ID:eS2pMQJr(1) AAS
>>859
>再帰はループに書き換えることができるから
そのループ再帰だよ・・・
再帰の問題点もそのまま同等に引き継いでるよ・・・
862: 2019/03/21(木)10:49 ID:uohid6CT(1) AAS
ループも不動点演算子も再帰関数の実装の仕方でしかない
863: 2019/03/22(金)06:20 ID:t/nkQ3ne(1) AAS
リストに対してはクイックソートやマージソートより選択ソートや挿入ソートのが速かった。
ケースによって使い分けるために色んなソートがあるんだなと実感した。
864: 2019/03/22(金)18:03 ID:GIrPmH5o(1) AAS
どうゆう状況でそんなことが起こるのか想像できない
865: 2019/03/22(金)20:18 ID:UnYyaz4E(1) AAS
リストってリンクリストってこと?
866: 2019/03/22(金)23:38 ID:bs44Fjbm(1) AAS
>>861
ループと再帰とは違うよ
更に言えば高階関数があればループも再帰も必要ない
不動点演算子もループも再帰だと言うのはナンセンスだ
それは「再帰と同じだ」と君が思うものを再帰と呼ぶ、と主張しているに等しい
こんな君だけの主観による再帰の定義では議論にならない
867
(1): 2019/03/23(土)01:46 ID:05rjzlE7(1) AAS
チューリング完全なんだからどの言語でも一緒、という暴論と同程度に「ループと再帰は同じ」も暴論
コンピュータからみた話じゃなくて、プログラムを書く人にとってループと再帰が同価値なのかが問題になる
自分は、複雑でも読み溶ける再帰の方が好き。ループが複雑になると、どの変数がいつのどの値を持っているのか追いきれなくなる
再帰で同程度に複雑な処理を書くと、引数の数やら名前からすぐにヤバイ臭いがするんでそんなに腐らない
868: 2019/03/23(土)04:14 ID:FVLL7ja7(1) AAS
末尾再帰にすると結局for文とやってることが一緒になる
869: 2019/03/23(土)04:46 ID:abrpiqJH(1) AAS
モナドな再帰(IOモナドやリスト->リストな再帰)は単純な再帰でもスタック消費しない。
繰り返しコードの単純さは再帰>末尾再帰>=ループ。
870: 2019/04/03(水)19:48 ID:mixCZYtf(1) AAS
非同期処理の終了を待って、次の繰り返しを行う
再帰でなければ書けない
871
(1): 2019/04/03(水)19:55 ID:EqbpbXJ3(1) AAS
ダウト
872: 2019/04/04(木)16:23 ID:GBwqjObH(1) AAS
>>871
非同期処理の終了はイベントやコールバックで通知されるものとする
終了を待つ同期プリミティブは存在しない

Javascriptだとこれが普通で、繰り返しでは書けない
873: 2019/04/04(木)20:54 ID:1bkj1Cge(1) AAS
納得
874: 2019/04/05(金)00:21 ID:ZWKOySqx(1) AAS
async/await が JavaScript の新しい仕様として入ったのも知らんのか
875: 2019/04/05(金)12:13 ID:dQkyjbHg(1/2) AAS
await/asyncの仕組みを知らないと見える
それ使って、繰り返しで書いてみなよ
876: 2019/04/05(金)12:38 ID:dQkyjbHg(2/2) AAS
やっぱ、await/asyncで出来そうな気がしてきた
877: 2019/04/06(土)00:52 ID:mONJLbhR(1) AAS
rx最強説
878: 2019/04/15(月)22:24 ID:SVQji9la(1) AAS
>>867
違うよ
柴犬にこっちは太郎でこっちは次郎だから別の犬だ、と言ってるのと同じ
879: 2019/06/19(水)04:57 ID:tVNS+22r(1) AAS
【出資】松本卓朗 人工知能詐欺【注意】
2chスレ:rikei
880: 2019/06/19(水)05:49 ID:K5sVxx6Y(1) AAS
再帰処理は
現在の関数が戻ってゆくアドレスをスタックに保存し、このアドレスを積極的に利用する。
プログラミングの実行アドレスをスタックから取り出して制御するので、
再帰プログラミングを利用するコツは、戻りアドレスを正しく理解することだ。

再帰は同じ関数を行ったり来たりするものだが、
日常の社会では、やらない方法だ。

普通は、配列を利用して、そこに保存してあるデータを使い、
同じ場所でプログラムを実行する
881
(1): 2019/06/19(水)22:51 ID:cv5jOa1Y(1) AAS
ツリーたどるときくらいかな?再帰使うの
882: 2019/06/22(土)10:20 ID:hB2G8Ayg(1) AAS
>>881
そらまあ再起が辿るイメージ図は全てツリーって名称付けれますし
883
(1): 2019/07/31(水)11:07 ID:w173sz60(1) AAS
ゲーム作るときになってようやく再帰の恩恵を得た
めっちゃ書きやすい
884: 2019/08/01(木)21:15 ID:C2rSdv5Y(1) AAS
>>883
ミニマックス法かアルファベータ法だろ?
885: 2020/01/03(金)14:12 ID:EVicjzWY(1) AAS
マイコンだとスタックが1桁とかだから再帰書いた瞬間に死ぬ
886: 2020/01/04(土)20:06 ID:q1efSz+a(1) AAS
ルネサスのRL78/G10はRAMが128Byteしかないらしいな
887
(1): 2020/12/05(土)18:00 ID:6KCHBqfq(1) AAS
再帰
>>887
888: 2021/01/11(月)13:49 ID:nJc/cTVc(1) AAS
λf . (λx . f (x x)) (λx . f (x x))
889
(1): 2021/01/13(水)14:49 ID:tLUt5qTN(1) AAS
ループで書くと出現する余計な変数がなくなるのが再帰のメリット
890
(1): ◆QZaw55cn4c 2021/01/13(水)21:38 ID:DfoNX22P(1) AAS
>>889

kwsk
ループ変数は再帰関数でも必要なのでは?
891: 2021/01/14(木)06:32 ID:7/cCpBde(1) AAS
どんどんスタックにつめば確かにループ変数はいらない
ただ、人間のためにループ変数はあった方かいいと思うけど
892
(1): 2021/01/27(水)21:57 ID:fE6h5Ua/(1) AAS
再帰関数を理解したとき、最初にこれ考えたやつは天才だと思ったね
実行速度やスタック問題はともかくコードは見ていて美しい以外の何者でもない。
893: 2021/01/28(木)02:47 ID:ggjwGOj3(1) AAS
CやUnix、オブジェクト指向なんかよりもはるかに古いんだよな
最初に実装されたのはlispかな
メモリを食いすぎるのでおもちゃしか動かなかったようだが
894: 2021/01/29(金)03:09 ID:5NtPwDh4(1) AAS
今の時代メモリ食いすぎても動くし遅くもならないよな
1億再帰とかやったら話は別だけど
895: 2021/07/16(金)14:24 ID:S3gddm5/(1/2) AAS
>>890

要らない

/* n の階乗を求める */
int fact(int n)
{
 if(n==0){
  return 1;
 } else {
  return fact(n-1);
 }
省3
896
(1): 2021/07/16(金)14:26 ID:S3gddm5/(2/2) AAS
おお、"n*" を忘れた。こんな短い関数にバグ突っ込む俺(泣)
897
(1): 2021/07/19(月)22:18 ID:hlpOkuZF(1) AAS
くだらん処理にスタックを使いたくないのでわしは使わん
ライブラリが殆ど無いマイナーCPUのマイナーCコンパイラでQuickSortを書いた時くらいじゃケケケ
898
(1): 2021/07/22(木)20:45 ID:sSLTRpJ4(1) AAS
最近じゃオプティマイザがなるべくスタック使わないように
最適化してくれるんじゃなかったっけ?
899
(1): ハノン ◆QZaw55cn4c 2021/07/25(日)23:45 ID:rUybnQpf(1) AAS
>>898
末尾再帰ならそうだと思いますが、末尾再帰でなければ無理でしょう >>896-897 は末尾再帰じゃないから最適化されにくい、というか、されない
900: 2021/10/02(土)15:46 ID:qz0ghb/n(1/3) AAS
>>8
ループと再帰の能力は同じです
かなり古い計算論の結果です
901: 2021/10/02(土)15:52 ID:qz0ghb/n(2/3) AAS
>>892
ゲーデル先生
902
(1): 2021/10/02(土)16:12 ID:qz0ghb/n(3/3) AAS
>>899
結合法則を仮定していいドメインなら
CPS変換を用いて最適化する手法が随分前からあります
結合法則はGPU並列化でも使われてます
浮動小数点の場合は工夫しないと誤差が変わりますが

ちなみにC++ conceptの初期案でもaxiomで法則を記述出来ました
903
(1): ハノン ◆QZaw55cn4c 2021/10/02(土)20:52 ID:7AkA9F3V(1) AAS
>>902
scheme の継続渡しに関係しますか?
キーワードありがとうございます
904: 2021/10/04(月)21:48 ID:tW+d3xqB(1) AAS
>>903
そう
Continuation-passing style, defunctionalization, and associativity
Categorical Structure of ContinuationPassing Style
この辺のサンプルプログラム読んで
905: 2021/11/01(月)12:26 ID:ZNnEkaFK(1) AAS
履歴をとってるループが再帰
906: 2022/09/07(水)22:59 ID:hj8+EGae(1) AAS
すき

しかし再帰絶対書かないマンが思いの外多くて草生えるわ

末尾最適化できない再起をループに展開したって結局キューだのスタックオブジェクトでヒープ使うわけで
メモリ大幅に節約できると勘違いしてる基地外とか話にならん

再帰深度がたかだか1000段とかでスタックフレームにデカいオブジェクトブチ込んだりしなきゃ
素直に再帰で組むのがいいに決まってるじゃないか
数学的演算でもしない限り業務用でスタック溢れるケースを探す方が大変
907: 2022/09/08(木)09:28 ID:JEMfdspa(1) AAS
スタックとヒープは別物
共有してるアーキテクチャもあるが
908: 2022/09/08(木)13:02 ID:o4zCWVHV(1) AAS
ループに展開できる処理をわざわざ再帰で書く奴も大概やけどな。
909
(1): 2022/09/08(木)15:04 ID:wt4RcFVD(1) AAS
展開できないものあるの
910: ハノン ◆QZaw55cn4c 2022/09/11(日)14:15 ID:gVwBfSXr(1) AAS
>>909
二方向に再帰するもの、は展開に苦労しますね
式の評価は、再帰じゃないと書けないですね
911: 2022/09/15(木)12:56 ID:LWNlvRIc(1) AAS
てst
912: 2024/01/02(火)13:18 ID:yx0oLXiq(1) AAS
再帰的データ構造は再帰でたどるのが楽なんだけど
ループで処理したほうが途中で抜けたり処理を組み合わせやすい
そこで再帰的な処理を遅延リストと組み合わせてループで処理するやり方がいまでは一般的な気がする

こういうふうに C#
外部リンク:paiza.io
913: 2024/01/04(木)11:34 ID:iR4GsMlV(1) AAS
何が一般的なのか知らんがかなり変態的なコードだな
ループでGetEnumerator呼び出したりMoveNextの戻り値を見ずCurrentを取り出したりは一般的じゃないぞ
つーかバグだろそれ
914: 2024/11/23(土)05:47 ID:dIdD47Ip(1) AAS
将棋やオセロ、ぷよぷよなんかは再帰処理使うよね
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.314s*