From: James Edward Gray II Date: 2007-04-17T04:25:20+09:00 Subject: Re: factorial in ruby On Apr 16, 2007, at 1:58 PM, David Simas wrote: > On Tue, Apr 17, 2007 at 02:56:16AM +0900, Jason Roelofs wrote: >> No and most likely not. >> >> def fact(n) >> if n == 0 >> 1 >> else >> n * fact(n-1) >> end >> end > > For large enough n, this will overflow the stack. Since Ruby doesn't > optimize tail-recursive functions (and the above isn't tail recursive, > anyway), you'd better write this function as a loop (left as an > exercise). >> class Integer >> def fact >> (2..self).inject(1) { |f, n| f * n } >> end >> end => nil >> 0.fact => 1 >> 1.fact => 1 >> 10.fact => 3628800 >> 10_000.fact => 28462596809170545189064132121198688901480514017... James Edward Gray II