かつのりの日記2

わんくまでは珍しいJavaを中心とした日記です

目次

Blog 利用状況

書庫

日記カテゴリ

いろいろリンク

再帰による解決

色々再帰ネタが出ていますね。

http://blogs.wankuma.com/nagise/archive/2007/09/17/96609.aspx

http://blogs.wankuma.com/episteme/archive/2007/09/16/96488.aspx

再帰って問題をシンプルに解決するには非常に有用な手法なんですが、昔JSONパーサを書いたときに失敗しました。再帰で処理していたのですが、ユーザ入力のJSONをパースするので、[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[のような入力が与えられると、スタックがオーバーフローしてしまいました。結局これはオートマトンで実装しました。

再帰を使う局面は、再帰の深さがシステム上において、認知かつ許容できるレベルにあるときに制限すべきでしょう。

投稿日時 : 2007年9月17日 23:35

Feedback

# re: 再帰による解決 2007/09/17 23:54 melt

http://d.hatena.ne.jp/yaneurao/20060227

こことか見ると再帰を非再帰に機械的に変換できるみたいなので、再帰で書いた後に非再帰に変換すればいいんじゃないかなぁと思ったり……。

# re: 再帰による解決 2007/09/18 0:12 かつのり

ステートオブジェクトとスタックオブジェクトを使って、
擬似再帰処理はありますね。

この辺は慣れと使い分けなのかな・・・
自分はオートマトンの方が慣れている人です。

# re: 再帰による解決 2007/09/18 11:54 凪瀬

再帰って要は作業中のメモリを退避して同じ作業を割り込んで行うわけですから
作業用の変数の扱いを工夫すれば非再帰に書き換えることが出来るわけですけど
いまひとつきれいなコードにしにくいんですよね…。

自分は最近だとCompositeパターンかVisitorパターンで書き換えちゃうことが多いですが、
階層が深くなればスタックの消耗が大きいのは変わらないですよね。
さて…。

タイトル
名前
Url
コメント