- なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
497 :デフォルトの名無しさん[sage]:2015/10/12(月) 09:01:39.37 ID:gvhM2OV1 - >>492
> 再帰はバグがなくてもスタックオーバーフローで死ぬ これも含めてバグだと思うけどね。 "再帰の深さ数えといて明らかに異常なときは"的な処理を入れとけばいいんじゃね?
|
- なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
508 :デフォルトの名無しさん[sage]:2015/10/12(月) 09:55:34.70 ID:gvhM2OV1 - >>506
> 無限ループは、元々正しくないコードなので > 本来の目的とするコードに直せば問題なし。 元々正しいコードであってもスタック足りなくなるような処理に、 再帰を使うべきでないというのは俺も同意見だが。
|
- なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
512 :デフォルトの名無しさん[sage]:2015/10/12(月) 10:11:25.69 ID:gvhM2OV1 - たとえばディレクトリツリーを解析するアルゴリズムで、
途中に親ディレクトリのリンクが混じってると、 無限ループになったり、スタック足りなくなったりする可能性あるけど、 それを含めてバグであって、 そのようなバグを回避手段を用意することにおいて本質的な違いは無いと思う。 後、会社の中でとか限られた状況で 再帰禁止 とかローカルルールを設定することに何も反論はないし、 そうした方がいい環境やケースもあるだろう。 ただ、掲示板のような不特定多数に向けて 再帰はダメ 見たいな論調はどうかと。
|
- なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
529 :デフォルトの名無しさん[sage]:2015/10/12(月) 13:04:27.92 ID:gvhM2OV1 - 例として
カレントディレクトリ以下の全てのファイルを全て表示する スクリプト書くけど、 こういう場合もダメってことなのかね。 再帰使わないで書くとすごく面倒になると思うけど。 #!/bin/csh set iPath = '.' if $#argv then set iPath = $1 endif foreach iFile(`ls $iPath`) echo $iPath/$iFile if -d $iFile then $0 $iPath/$iFile endif end
|
- なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
530 :デフォルトの名無しさん[sage]:2015/10/12(月) 13:14:33.36 ID:gvhM2OV1 - 本質とは関係ないけど例に挙げたスクリプトバグあったわ。
下記ね if -d $iPath/$iFile then
|
- なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
534 :デフォルトの名無しさん[sage]:2015/10/12(月) 13:33:29.14 ID:gvhM2OV1 - >>533
find や tree の実装はきっと再帰になってるよ。
|
- なあ、再帰関数好きな人いる? パート2 [転載禁止]©2ch.net
540 :デフォルトの名無しさん[sage]:2015/10/12(月) 13:58:48.22 ID:gvhM2OV1 - スレタイが再帰"関数"になってるのか。
そういう意味で >>529 は例としてふさわしくないね。 Cとかで例挙げるとゴチャゴチャした余計なもの書かなきゃならないんで、 再帰使わないと非常にメンドウな挙げたかった というのが主張の本質と捕らえて欲しい。 後、確証バイアスに陥らないように。
|