えぐち です。 ---------- > 差出人 : 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 なんてのがありますが、再帰を使わないので反則ですね。 (これなら、上限はスタックとは無関係な大きな数ですが) えぐち