えぐち です。

----------
> 差出人 : Yukihiro Matsumoto <matz / netlab.co.jp>
> 件名 : [ruby-list:4712] Re: fact.rb (1.0-970919, nextstep)
> 
> まつもと ゆきひろです
> 
> In message "[ruby-list:4709] Re: fact.rb (1.0-970919, nextstep)"
>     on 97/09/29, WATANABE Hirofumi <watanabe / ase.ptg.sony.co.jp> writes:
> 
> |わたなべです.
> 
> |逆にチュートリアルのほうを 200 にしちゃうのはだめかな?
> |400 でも 200 でも人間にはわからないってことでは大してかわら
> |ないと思うし. 100 でもいいけど.
> 
> そうしましょう.今の1.1alphaが一段落したらドキュメント(と本
> の原稿)に手を入れようと思っていたので,その時に一緒に.

すこし fact.rb をいじると、若干ヘッドルームが広がるようです。

-- fact2.rb --
def fact(n)
  fact2(n, 1)
end

def fact2(n, m)
  if n == 0
    m
  else
    fact2(n-1,n*m)
  end
end
print fact(ARGV[0].to_i), "\n"
--------------

1.0-970919/freebsd2.2.2 では、

	fact.rb ==> 2349
	fact2.rb ==> 3413

が fatal: stack level too deep しない限界でした。

また、別解として

def fact2(n,m)
  while TRUE
    return m if n == 0
    n, m = n-1, n*m
  end
end

なんてのがありますが、再帰を使わないので反則ですね。
(これなら、上限はスタックとは無関係な大きな数ですが)

	えぐち