Iteration for Factorials

J. Clifford Dyer jcd at sdf.lonestar.org
Tue Oct 30 11:25:24 EDT 2007


On Tue, Oct 30, 2007 at 01:09:38PM +0100, Boris Borcic wrote regarding Re: Iteration for Factorials:
> 
> Py-Fun wrote:
> > I'm stuck trying to write a function that generates a factorial of a
> > number using iteration and not recursion.  Any simple ideas would be
> > appreciated.
> > 
> 
> fact = lambda n : len(map([1].__imul__,range(1,n+1))[0])
> 

OK.  Now I've been sucked in.  How about this:

def fact(x):
	def f(x):
		if int(x) != x:
			raise ValueError
		elif x > 1:
			return f(x-1) ** x
		elif x == 1:
			return 10
		else:
			raise ValueError
	return len(str(f(x))) -1

The great part about this recursive solution is that you don't have to worry about the stack limit because performance degrades so quickly on the conversion to string!  fact(8) takes a little less than a second, fact(9) takes about a minute, and fact(10) takes more time than I had patience to wait for!

Cheers,
Cliff




More information about the Python-list mailing list