トップ «前の日記(02/02/2005) 最新 次の日記(02/04/2005)» 編集

本 日 の h o g e

hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。

更新情報の取得には rdflirs を使ってもらえると嬉しいです.


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 はバグか.