トップページ⇒tech
1001コメント344KB

なあ、再帰関数好きな人いる? [転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001名無しのプログラマ2015/08/09(日) 17:46:33.69ID:Icb40LOY
for,while使うの嫌いで基本的に再帰多用するんだが、だめなの?
皆から敬遠されてる気がする
0153デフォルトの名無しさん2015/08/13(木) 03:39:48.62ID:WDxyRHha
そういや実務で再帰使う必要せいってねーな。
あっても隠蔽するから両手で数えられるほどしか無い。
片手でもいけるかもw
0154デフォルトの名無しさん2015/08/13(木) 03:51:07.78ID:NebXzry6
>>152
私はそこまで一般化はしてないですし、適材適所も否定してません
それと必要性の比較も関係ありませんよ
例えばgoto文も適材適所ですが、必要性は低いと思ってます

再帰がループと同程度に必要と思うなら、そう言ってくれればいいです
違う場合に、その先の話がしたいだけなので
0155デフォルトの名無しさん2015/08/13(木) 04:15:21.85ID:NebXzry6
ループが本当に必要な部分というのを、議論してみたかったんですが
どうあっても再帰は不要といいつつ、ループが必要とは言わないんですね…
0156デフォルトの名無しさん2015/08/13(木) 04:27:48.44ID:WDxyRHha
>>154
実践では再帰はあまり使いません。
必要性の話をするのなら
それが現実では?
0157デフォルトの名無しさん2015/08/13(木) 07:42:46.93ID:GBQWWFg+
クイックソートもループで書くんですか?
0158デフォルトの名無しさん2015/08/13(木) 07:48:57.17ID:FXSompvo
アスペかよ
0159デフォルトの名無しさん2015/08/13(木) 08:21:16.88ID:Iax2S8IU
>>157
実用的なクイックソートはループ。

まさか再帰でしか実現できないなんて考えとるんか?
0160デフォルトの名無しさん2015/08/13(木) 08:52:19.31ID:GBQWWFg+
>>159
再帰より可読性の高い、ループでのクイックソートの実装は寡聞にして知りません。
0161デフォルトの名無しさん2015/08/13(木) 09:30:01.18ID:Iax2S8IU
ループ方式も可読性は高い。
特別なことはやらないから、誰でもすぐ実現できるはず。

Cどころか昔のVBのようなへぼ環境でも
何百万ものデータを高速にソートできてしまう。
0162デフォルトの名無しさん2015/08/13(木) 09:53:04.16ID:GBQWWFg+
例えばこれ
https://github.com/lattera/glibc/blob/master/stdlib/qsort.c
本来の再帰アルゴリズムを、非再帰で記述するために状態を自前のスタックで管理しなきゃならない。
余計なコードが必要な分、可読性は低いですね。
0163デフォルトの名無しさん2015/08/13(木) 10:07:42.74ID:Q4WJ33HH
>>162
FSF、Microsoft、そしてAppleが再帰を避けるのは何故か考えてみては。
0164デフォルトの名無しさん2015/08/13(木) 10:10:35.79ID:wsd38m6J
再帰関数をスタック無視して設計するような馬鹿じゃなけりゃ、
どっちでもいいよ。
金太郎飴をループで切るか再帰で切るか、程度の話しかしてない
みたいだしな。その関数がその構造のどこまでのデータを扱うのか
ってことを意識してりゃ別にいい。
再帰でよその子をいじったりとかするのは馬鹿のやること。
0165デフォルトの名無しさん2015/08/13(木) 10:13:00.13ID:1x08JE5T
論点がずれてないか?
>>162は可読性について論じているのに
0166デフォルトの名無しさん2015/08/13(木) 10:27:03.54ID:Q4WJ33HH
>>165
わざわざglibcのソース引っ張り出してるとこからして、本人も言いたいことが自分で分かっていないのでは?

Cで再帰するコードを書けば、たいていのチェッカが警告するし、品質保証からお叱りを受けるはず。
やってはいけないことの一つとして、ほとんどの企業で明文化されているはずです。

そして良く知られるMISRA-Cも通りません。

こういう状況下で、glibcのソースを引用して再帰するべきと主張するのはおかしい。
glibcでも再帰は避けている、再帰するべきでないという主張になるのが当然だと思う。

そうなっていないという事は、本人が一番自分の主張をわかっていない。
と思うのです。
0167デフォルトの名無しさん2015/08/13(木) 10:30:12.83ID:NebXzry6
さすがにこれを可読性が高いとは言うのは無茶じゃないかと
0168デフォルトの名無しさん2015/08/13(木) 10:30:37.05ID:Iax2S8IU
可読性が悪いかどうかじゃなく、
再帰の場合よりも良くなくてはいけないと?

理解困難なコードでなく実用性があるのなら採用するでしょ。

プログラマはソート処理のコードは使いまわして
比較関数を用意すればいいだけだし。
0169デフォルトの名無しさん2015/08/13(木) 10:32:46.72ID:GBQWWFg+
>>166
可読性の話をしてるんですが?
0170デフォルトの名無しさん2015/08/13(木) 10:38:27.46ID:WDxyRHha
>>162
> 本来の再帰アルゴリズムを、非再帰で記述するために状態を自前のスタックで管理しなきゃならない。

だから適切なものを選べって言ってるじゃん。

誰が、再帰が適切なものまで、
ループにしろって言ったよ?

ループで済むものを再帰でやるなって話。

ほんと>>41で書いた4の段階のやつだなお前は。
0171デフォルトの名無しさん2015/08/13(木) 10:40:07.80ID:WDxyRHha
>>168
> プログラマはソート処理のコードは使いまわして
> 比較関数を用意すればいいだけだし。

そういう場合、そのソートは何に使われるかわからないから
往々にして、速度が一番早い方法を選ぶんだよね。
つまりループで実装。
0172デフォルトの名無しさん2015/08/13(木) 10:41:21.58ID:A9RCljrX
ソースがコンパイラにどう最適化されて実行時にどう動かされるかを考えてると
可読性の基準が変わってくるでしょ
再帰で触感的に記述できるのは再帰構造持ったアルゴであって
本来行うべき実行じゃないから非直観的なんよ

可読性として表現したい対象がそもそも違うのよね
0173デフォルトの名無しさん2015/08/13(木) 10:42:13.58ID:96XWMJC8
実用向けだと可読性だけと言うわけにはいかないからなぁ
スタックオーバーフローを検出して適切にエラー処理するために自前のスタックにするとかは普通にあるし
0174デフォルトの名無しさん2015/08/13(木) 10:43:10.07ID:NebXzry6
>>166
中身ちゃんと読んでますか?
このソース要素数が一定以上の場合、どうやらquicksortしない仕様で、
quicksort処理部もスタック使ってるようですよ

要素数で分けて安全性を保っているだけで、
処理そのものの安全性そのものは再帰と変わってません
0175デフォルトの名無しさん2015/08/13(木) 10:47:32.08ID:Iax2S8IU
>このソース要素数が一定以上の場合、どうやらquicksortしない仕様で、

何言っとるんだ?
0176デフォルトの名無しさん2015/08/13(木) 10:47:43.55ID:WDxyRHha
>>172
> ソースがコンパイラにどう最適化されて実行時にどう動かされるかを考えてると
> 可読性の基準が変わってくるでしょ

可読性の読みやすさって
人間の読みやすさだからw

コンパイラにとっては可読性関係ないよ
どんなに読みづらいコードでも
書いてあるとおりに解釈してくれる。
0177デフォルトの名無しさん2015/08/13(木) 10:48:35.29ID:Q4WJ33HH
>>174
自前のスタックを使っています。
確かにあなたのおっしゃる通り*自前の*スタックを使っています。

ですが再帰ではありません。
0178デフォルトの名無しさん2015/08/13(木) 10:48:36.95ID:Q4WJ33HH
>>174
自前のスタックを使っています。
確かにあなたのおっしゃる通り*自前の*スタックを使っています。

ですが再帰ではありません。
0179デフォルトの名無しさん2015/08/13(木) 10:51:04.09ID:Q4WJ33HH
C/C++で再帰を使うことが良くないマナーであることは、とっくの昔に
明文化された事実なんですよ。

手間がかかろうがなんだろうが、再帰を無くさなければならない。

そんなこと当たり前じゃないですか。
0180デフォルトの名無しさん2015/08/13(木) 10:51:19.49ID:GBQWWFg+
>>163
glibcのqsortでもstack_node stack[STACK_SIZE]が溢れますね。
メモリ消費量は、再帰で書くとそれに加えて、リターンアドレスやフレームの保存領域が余計に必要になるだけですよね。
0181デフォルトの名無しさん2015/08/13(木) 10:53:38.16ID:Q4WJ33HH
>>180
じゃあ品証にそう言って噛みついてみては?
0182デフォルトの名無しさん2015/08/13(木) 10:55:16.00ID:Q4WJ33HH
こんな当たり前のことで今更何議論してるんだって話。
0183デフォルトの名無しさん2015/08/13(木) 11:01:18.21ID:Iax2S8IU
>stack_node stack[STACK_SIZE]が溢れますね。


これは指定の番号のデータが、ソート結果として
第何番目になるかを出力させるといい。

つまり順番に数値を格納した配列を用意して
その要素をクイックソートの置き換え処理の対象にさせる。
また、比較関数もこれに対応したものを用意する。

この方式なら
int stack[STACK_SIZE]
を用意すればいいので、件数は多くても
メモリ消費量はそんなに必要にならない。
0184デフォルトの名無しさん2015/08/13(木) 11:01:20.46ID:GBQWWFg+
>>170
>>53が言い出した「再帰は可読性が悪い」に対する反論なのですが。
0185デフォルトの名無しさん2015/08/13(木) 11:01:38.29ID:NebXzry6
>>175
コメントとMAX_THRESHで追えば解ると思います
全くしないわけではないです
0186デフォルトの名無しさん2015/08/13(木) 11:13:50.27ID:GBQWWFg+
>>183
非再帰版は再帰を自前のスタック管理でエミュレートしているだけなんだから、
同一データを、再帰版と非再帰版で実行すると再帰版の再帰の深さと、
非再帰版のstackの使用個数は同じになるに決まってるじゃないですか。
0187デフォルトの名無しさん2015/08/13(木) 11:15:13.87ID:1x08JE5T
再帰は普通につかうでしょ
OSとかの制作には向いてないってことで
普通のソフトならオーバーフローしない限り問題ない
0188デフォルトの名無しさん2015/08/13(木) 11:22:16.59ID:Q4WJ33HH
>>187
使いません。
0189デフォルトの名無しさん2015/08/13(木) 11:24:47.30ID:Q4WJ33HH
CERT C Secure Coding Standard、ISO/IEC TR 24772:2013、MISRA-C。
よく使われるガイドライン、規約で明示的に禁止されています。

C/C++で再帰は邪悪なのです。

再帰を使う人は悪人です。
0190デフォルトの名無しさん2015/08/13(木) 11:26:18.86ID:1x08JE5T
おれたちにとってそれを書いた人の意見が正しいわけじゃないから
0191デフォルトの名無しさん2015/08/13(木) 12:51:43.10ID:GBQWWFg+
>>189
ウソつき。 禁止してるのってMISRA-Cだけですね。
CERT C Secure Coding Standard
Recursion can also lead to large stack allocations. Recursive functions must ensure that they do not exhaust the stack as a result of excessive recursions.

ISO/IEC TR 24772:2013
6.37.5 Avoiding the vulnerability or mitigating its effects
Software developers can avoid the vulnerability or mitigate its ill effects in the following ways:
+ Minimize the use of recursion.
+ Converting recursive calculations to the corresponding iterative calculation.
In principle, any recursive calculation can be remodeled as an iterative
calculation which will have a smaller impact on some computing resources but
which may be harder for a human to comprehend.
The cost to human understanding must be weighed against the practical
limits of computing resource.
+ In cases where the depth of recursion can be shown to be statically bounded
by a tolerable number, then recursion may be acceptable, but should be
documented for the use of maintainers.
0192デフォルトの名無しさん2015/08/13(木) 12:54:40.29ID:V/aggySn
Scala だと末尾再帰が推奨されてる感じだけど
0193デフォルトの名無しさん2015/08/13(木) 13:05:26.51ID:WDxyRHha
特定の言語特有の例外でしょうね
0194デフォルトの名無しさん2015/08/13(木) 13:06:35.36ID:t3mydoM3
特有というか関数型言語
0195デフォルトの名無しさん2015/08/13(木) 13:12:01.20ID:WDxyRHha
でも推奨してるのはScalaだけなのでしょう?
0196デフォルトの名無しさん2015/08/13(木) 13:12:01.28ID:A9RCljrX
おれの予想だとそろそろ
糞みたいな本のコピペ宣伝がくるね
0197デフォルトの名無しさん2015/08/13(木) 13:13:19.26ID:WDxyRHha
>>196
それは、押すなよ、押すなよってやつですか?
それとも自分でコピペして、ほら俺の言ったとおりだった(ドヤ顔)を
やるための布石ですか?
0198デフォルトの名無しさん2015/08/13(木) 13:13:33.60ID:GBQWWFg+
クイックソートは再帰版の方が可読性が高い。
これに異論はありますか?
0199デフォルトの名無しさん2015/08/13(木) 13:14:50.27ID:aB+CmHXz
>>194も言ってるが関数型言語のような破壊的代入を避けることが推奨の言語は、
ループは再帰で表現するのが推奨
Scala特有とか意味わからん
0200デフォルトの名無しさん2015/08/13(木) 13:19:18.15ID:WDxyRHha
>>198
中途半端な質問するなよw

クイックソートは再帰版の方が可読性が高い。
バブルソートは再帰版の方が可読性が高い。
マージソートは再帰版の方が可読性が高い。
これに異論はありますか?

やるならこれぐらいやれよw
その言い方だとクイックソートだけしか勝ち目がないと
自覚しているかのようだぞ。

なお、ソートの種類には以下の様なものが有るらしい。
https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%BC%E3%83%88

バブルソート、シェーカーソート、コムソート、ノームソート、選択ソート、挿入ソート
シェルソート、2分木ソート、ライブラリソート、マージソート、In-place マージソート
ヒープソート、スムースソート、クイックソート、イントロソート、ペイシェンスソート
ストランドソート、奇偶転置ソート、シェアソート

半分も知らんなw
0201デフォルトの名無しさん2015/08/13(木) 13:20:57.51ID:WDxyRHha
>>199
推奨とか、破壊的代入を禁止するという制約のために
選択肢がないだけに見えますが。

破壊的代入を禁止することが、
必ずしも可読性を高めるとは限らないので。
0202デフォルトの名無しさん2015/08/13(木) 13:24:34.58ID:NebXzry6
>>200
fold mapでループは消えますので、再帰より不要ですね(煽り)
0203デフォルトの名無しさん2015/08/13(木) 13:27:20.56ID:WDxyRHha
>>202
fold mapによって消えるものがなぜループだと?
fold mapによって再帰が消えるのではないのですか?
0204デフォルトの名無しさん2015/08/13(木) 13:28:32.66ID:W1EX3EBl
やっぱりfold mapの実装はループであるべきだって
自覚してるんでしょうね(煽り)
0205デフォルトの名無しさん2015/08/13(木) 13:30:40.85ID:GBQWWFg+
>>200
>>53
> 普段はやはり再帰のコードは書くべきじゃないよ。
> 可読性悪いからね。

これが間違いであることは、反例を1つ示せば十分ですよね。足りないというなら、
ID:Q4WJ33HH氏がドヤ顔で言い出したISO/IEC 24772:2013にも
In principle, any recursive calculation can be remodeled as an iterative
calculation which will have a smaller impact on some computing resources but
which may be harder for a human to comprehend.
The cost to human understanding must be weighed against the practical
limits of computing resource.
って明記されてるし。
0206デフォルトの名無しさん2015/08/13(木) 13:34:22.81ID:W1EX3EBl
"普段は" って書いてあることから
普段に当てはまらない場合は違うと言ってるわけで、
反例があるってことは、最初から言ってることですね。
0207デフォルトの名無しさん2015/08/13(木) 13:43:25.91ID:GBQWWFg+
>>206
その「普段」は発言者の彼によると、「再帰を繰り返しに置き換える」ので、クイックソート非再帰版が「普段」ですよね。

> 再帰を使うことはめったにない。そしてミスをしやすい所でもある。
> だから再帰を使うときは、再帰を考慮しなくていい形に置き換えるようにしている。
0208デフォルトの名無しさん2015/08/13(木) 13:44:15.15ID:W1EX3EBl
>>207
その発言者は私ですが、普段というのは
日々の仕事の話ですよw

普段あなたは何をしてるのですか?
の普段です。
0209デフォルトの名無しさん2015/08/13(木) 13:47:30.00ID:W1EX3EBl
クイックソートの話で言えば、
普段はクイックソートの実装などせずに

予め用意されたソート関数、つまり高階関数を引数にしたソート関数を
呼び出すだけなので普段は再帰を使ったコードを書きません。

>>202の発言風に言うと、
sortで再帰は消えますので、再帰は不要ですね(煽り)
0210デフォルトの名無しさん2015/08/13(木) 13:47:49.82ID:GBQWWFg+
>>208
「普段」はクイックソートのように再帰版の方が可読性の高いものを、非再帰版に書き直さないのですか?
0211デフォルトの名無しさん2015/08/13(木) 13:50:17.90ID:W1EX3EBl
>>210
普段は再帰は可読性が低いので、
再帰だとわからないように
sort関数のようなものを作ります。

再帰が可読性高かったら、
わざわざsort関数なんて作りませんよw
0212デフォルトの名無しさん2015/08/13(木) 14:02:03.63ID:GBQWWFg+
>>211
再帰版クイックソートは可読性が低いという主張ですね。

>>206と矛盾しますが。
> 普段に当てはまらない場合は違うと言ってるわけで、
0213デフォルトの名無しさん2015/08/13(木) 14:09:44.52ID:NebXzry6
>>203
え…?再帰構造にmap使うんですか?
かなり効率悪いと思いますが
0214デフォルトの名無しさん2015/08/13(木) 14:23:38.44ID:W1EX3EBl
>>213
え?そんな話してませんよ。

話の内容を整理しましょう。

fold mapによって消えるものがなぜループだと
思っているということは、fold mapが再帰ではなく
ループで実装されていると思っているからでしょう?

fold mapを使えば、ループが要らないっていうのはそういうことですね。
もしfold mapの中身が、ループではなく再帰で実装されていると思っているのなら、
fold mapで消えるのは再帰だと考えるはずです。

だから、ははん、こいつはループを使ったほうが適切な問題だって
わかっていると言ったんです。

最初っから言ってるように、適切なものを使う。
単なるリスト構造であればループで良い。
再帰的な構造であれば再帰使えばいいと言ってます。
0215デフォルトの名無しさん2015/08/13(木) 14:27:29.97ID:W1EX3EBl
>>212
> 再帰版クイックソートは可読性が低いという主張ですね。

全く違います。

再帰を使ったコードは可読性が低いので、
sort等の関数を使って再帰を隠蔽するというのが
私の主張です。

何回も説明したはずですが?

「普段」というのは>>208で書いたように、
日々の仕事のことですから、普段は再帰は使いません。

使うことがあっても内部で隠蔽されたsort関数などを使うし、
自分で隠蔽するので、普段は再帰は使いません。
0216デフォルトの名無しさん2015/08/13(木) 14:29:35.52ID:NebXzry6
>fold mapによって消えるものがなぜループだと
>思っているということは、fold mapが再帰ではなく
>ループで実装されていると思っているからでしょう?
全然違います
ループに代替可能、かつ効率が上がる可能性があるからです
mapの実装がループって…ループや再帰で実装はできますが、
逐次処理に書き下したらmapの優位性なくなりますよ

その下は間違った前提で話してるのでスルーします
0217デフォルトの名無しさん2015/08/13(木) 14:31:12.41ID:NebXzry6
安価忘れ >>214
間違い訂正:ループに代替可能 → ループを代替可能
0218デフォルトの名無しさん2015/08/13(木) 14:39:15.29ID:W1EX3EBl
>>216
もしかして、mapの実装をmapで書いてると言った人ですか?w

mapというのは写像のことです。
f: A → B のことです。

プログラミング的に書くならば、
B = f(A) という形になってないとmapではありません。
ループもしくは再帰でmapを実装するのですよ。

もっともこの場合は、ループで実装するのが適切だから
再帰は使いません(何度も私が言ってます。道具は適切に使いましょう。)

そして逐次処理に書き下しするって何の話してるのですか?
逐次処理の反対は並列処理ですが、今並列か逐次かの話なんかしていましたかね?
ループも再帰も逐次処理ですし。
0219デフォルトの名無しさん2015/08/13(木) 14:49:38.43ID:NebXzry6
>>218
mapはあなたの言う通りただの写像ですから、
それだけで逐次か並列かを縛るものじゃないですよ

再帰処理という意味なら、必然的に並列化して分割統治できるので、
どう見ても再帰が有利ですね
0220デフォルトの名無しさん2015/08/13(木) 14:52:27.40ID:t3mydoM3
>>214
いやだからリストは最も基本的な再帰的なデータ型だから。。
木より
0221デフォルトの名無しさん2015/08/13(木) 14:56:24.24ID:W1EX3EBl
全てのループは再帰で表現した方がいいというのであれば
全てのループは再帰で変換可能なので、
全てのループは並列化して分割統治できるということになりますが?

何度も言ってるように、適切なものを使いましょう?
ループを使ったほうが良い場合は
わざわざ再帰にする必要はないのですよ。

ちょっと出かけなきゃならないので、wikipedia貼って終わらすけど、
再帰だからって並列化できるとは限りません。

https://ja.wikipedia.org/wiki/%E4%B8%A6%E5%88%97%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
再帰的でありながら並列化が非常に難しい問題もある。例えば、グラフにおける深さ優先探索がある。
0222デフォルトの名無しさん2015/08/13(木) 14:57:39.52ID:W1EX3EBl
>>229
再帰の中でも一番シンプルなデータ構造です。
シンプルなデータ構造にはシンプルなループを使いましょう。
0223デフォルトの名無しさん2015/08/13(木) 15:00:06.78ID:W1EX3EBl
あ、一応煽っておこう。

再帰、再帰ばかり言ってないで、
最近何処かに出かけたか?w

引きこもってばかりだと、
体が細菌だらけになっちゃうぞw
0224デフォルトの名無しさん2015/08/13(木) 15:09:12.83ID:NebXzry6
>>221
主張してない事を主張として反論する事が多いですね…

逐次処理が必須なものは、並列化できなくて当然ですね
あえて挙げる意味ありますか?

ループと逐次処理で、並列の分割統治はできません
並列した時点でもうループではなく、並列、または再帰的処理です

そもそも自分で高階関数でいいと言ってるんですから、
逐次処理のループは消しましょう

>>223
もう本当ただの煽りですねw
0225デフォルトの名無しさん2015/08/13(木) 15:16:09.30ID:GBQWWFg+
>>215
> 全く違います。

これと
> 再帰版クイックソートは可読性が低いという主張ですね。
これ
> 再帰を使ったコードは可読性が低いので、
> sort等の関数を使って再帰を隠蔽するというのが
の、どこが違うのでしょう?

再帰版クイックソートは非再帰版に比べて、可読性が低いのですか? 高いのですか?
0226デフォルトの名無しさん2015/08/13(木) 15:44:30.69ID:t3mydoM3
>>222
いやどっちがシンプルな方法かは状況によりますし
そもそもリストの再帰でシンプルにならなかったら別のデータ構造使うべし
0227デフォルトの名無しさん2015/08/13(木) 15:53:27.98ID:uKHAyuPa
仮想関数もだが
再帰関数は自己満足でしかないな
0228デフォルトの名無しさん2015/08/13(木) 16:00:20.34ID:Iax2S8IU
仮想関数は自己満足じゃないぞ。

実用的なプログラミング手法
0229デフォルトの名無しさん2015/08/13(木) 16:13:22.44ID:t3mydoM3
普通のオブジェクト指向言語だったらデフォルトで仮想関数
0230デフォルトの名無しさん2015/08/13(木) 16:29:24.52ID:wsd38m6J
どっちも相手の言い分を聞く気はなく、反論する付け入りどころを
つくだけの議論に価値はないから、メアドでも交換して、
勝手にメールでやってくんない?
0231デフォルトの名無しさん2015/08/13(木) 17:14:18.17ID:dAU/S6bT
再起なんてプログラマの基礎知識だろ。
デザイナか底辺コーダーみたいなヤツらばっか
0232デフォルトの名無しさん2015/08/13(木) 17:41:32.08ID:FeXmcCf7
探索も書かないようなウンコーダーに再帰は不要
0233デフォルトの名無しさん2015/08/13(木) 17:55:50.75ID:A9RCljrX
あーいえばコーダー
0234デフォルトの名無しさん2015/08/13(木) 19:13:46.18ID:ZdpNokWx
>>17
ループはコンパイル時に最適化かかるから高速化しやすい
0235デフォルトの名無しさん2015/08/13(木) 19:38:20.24ID:4z/i7w/x
再帰完全否定してるダメプログラマはとりあえずハノイの塔ループで解いて来いよwwww
0236デフォルトの名無しさん2015/08/13(木) 23:05:53.46ID:TPLbUV1y
gcc の qsort が非再帰なのは単に速度を重視した結果じゃないの?
速度も含めて、再帰と非再帰でそんなに大騒ぎするほどの違いがあるかなあ。
0237デフォルトの名無しさん2015/08/13(木) 23:12:53.85ID:WInk48Wa
何言ってんだコイツ。
0238デフォルトの名無しさん2015/08/13(木) 23:47:23.70ID:WInk48Wa
>>191
再帰使うなと書いてあるだろ。
何言ってんだお前。
0239デフォルトの名無しさん2015/08/14(金) 00:02:47.08ID:She38G+m
何言ってんだおじさんこんばんわ
0240デフォルトの名無しさん2015/08/14(金) 00:31:35.66ID:bS+eLMvH
再帰は使うな。

これが国際ルール。
0241デフォルトの名無しさん2015/08/14(金) 00:38:24.26ID:30JcjEEE
>>236
ID:W1EX3EBl氏曰く、可読性が悪いから許容出来ない。らしい。
0242デフォルトの名無しさん2015/08/14(金) 00:45:15.19ID:She38G+m
つまり、再帰を使うやつっていうのはジュリアナでケンメリなんだよね
0243デフォルトの名無しさん2015/08/14(金) 00:49:42.60ID:EjQiuBiC
だから言語によるっつーの
0244デフォルトの名無しさん2015/08/14(金) 00:53:34.88ID:She38G+m
そんなバナナ
0245デフォルトの名無しさん2015/08/14(金) 02:23:00.05ID:bS+eLMvH
>>243
再帰を使わなければならない言語は実用性ないからやめとけ。

煽ってるように思うかもしれないが、10年後に思い返してみ。
その通りだったとわかるから。
0246デフォルトの名無しさん2015/08/14(金) 03:21:13.76ID:EMHxFo3V
結局関数モデルより命令型計算モデルのほうが直感的で素直なんだよね
関数型を選ぶのはコンプレックスとか本来の目的以外がモチベーションになってる
0247デフォルトの名無しさん2015/08/14(金) 04:02:13.98ID:wyMAq0xx
と、コンプレックスこじらせてた人が申しております
0248デフォルトの名無しさん2015/08/14(金) 04:50:19.83ID:MLcHO6rW
関数型モデルより命令型が直観的とかいうやつがいることが信じられん
0249デフォルトの名無しさん2015/08/14(金) 05:07:39.58ID:QRcaU/9J
このスレの再帰のキティ害はレベル低すぎ

英語は読み間違えるし、コードを読む力が皆無だし
再帰のコードをループに直せないし、
何よりも再帰を使用してはいけないことが理解できない。

プログラマの基礎学力を欠いてる。
0250デフォルトの名無しさん2015/08/14(金) 05:20:19.69ID:wyMAq0xx
この人何ですぐID変えるん?
0251デフォルトの名無しさん2015/08/14(金) 05:46:48.29ID:SrkbsMCI
>>249
読み間違えるんじゃなくて、読んでないんだろ。

何となくそれっぽいこと書けばいいみたいな。

再帰の危険性を指摘した文章を引用して、再帰するべきであると主張してるし。
自前スタックによる実装を示して、再帰してると主張するし。
しかも、読んでないだろとか言いがかりつけてくるし。

打ち負かすのが目的だから話にならない。

CERT CC読むだけでも再帰がなぜいけないのかわかるだろうに。
0252デフォルトの名無しさん2015/08/14(金) 05:53:10.80ID:SrkbsMCI
それじゃそろそろまとめます。

2chコーディング規約第一条、再帰の禁止。
再帰を用いる者は、50万円以上の過料、あるいは10年以上の禁固刑と処す。
■ このスレッドは過去ログ倉庫に格納されています