hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。
02/03/2005 ふむ [長年日記]
tDiary 833日目
■ [日記][Py] うーむ
久しぶりに研究室の机に突っ伏したまま寝てしまった.で,気付くと 5 時間くらい経ってた.体の節々が痛いぞ.
うえ
その間 Python で書いたシミュレーションプログラムを 4 台のマシンでブン回してたんだけど,その内 1 つが大量の再帰を検出とかで止まってた.アルゴリズム的に無限はありえないはずなんだけど,量が多すぎたらしい.
困ったな.1000 程度でダメなのか.10000 までやるつもりだったんだが.
んー
試してみた.
Python 2.3.4 (#1, Oct 18 2004, 10:21:01) [GCC 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> def hoge(c, max): ... c += 1 ... if c > max: ... return c ... return hoge(c, max) ... >>> hoge(0, 998) 999 >>> hoge(0, 999) RuntimeError: maximum recursion depth exceeded
うーん
特にこだわりがあるわけではないし再帰は遅いので結局ループに書き換えた.実際の処理手順を忠実に再現するなら再帰が正しいけど,挙動は変わらないはずだからよしとするか.
Ruby だと
どうなるんだろうと思って試してみた.
irb(main):001:0> def hoge(c, max) irb(main):002:1> c += 1 irb(main):003:1> if c > max irb(main):004:2> return c irb(main):005:2> end irb(main):006:1> return hoge(c, max) irb(main):007:1> end => nil irb(main):008:0> hoge(0, 500) セグメンテーション違反です
ちょっと待て,例外出ずに SegFault かい.
……値を変えて試してみるとどうも 300 程度が限度みたい.この SegFault はバグか.