On Tue, Oct 19, 2010 at 4:02 PM, Matthew Nunes <matthewnu...@hotmail.com>wrote:
> To whom it may concern, > > Hi, I've just started learning how to > program in python using Allan B. Downy's book "How to think like a computer > scientist" and it explained something in the recursion chapter which have > still been unable to understand. It wrote a piece of code for the factorial > function in math for example 3! is 3 * 2 * 1. I cannot understand the how it > claimed the code executed, and logically it makes no sense to me. Please > explain it to me, as I have spent hours trying to get my head around it, as > the book(in my opinion) did not explain it well. Here it is: > That's a pretty solid book. This example uses recursion - for a great example of recursion, search Google for recursion But we can examine the code: This is a function that takes one parameter named n > def factorial(n): > If n is 0 then return 1 (since 0! = 1) > if n == 0: > > return 1 > > else: > If n > 0 then the definition of a factorial is n * factorial(n-1) - which we do here in two steps > recurse = factorial(n-1) > > result = n * recurse > And then we return the result > return result > > If there is and easier piece of code that you know of that can be used for > factorial, if you could please also tell me that. > This is probably the very easiest recursive example to get your head around because the definition of factorial is recursive. However, it's a *terribly* inefficient way to compute the factorial of a number. The most efficient way for something like 3 is this: import math math.factorial(3) Using the built-in functions are always better. However, if you're wanting a code example you can do this one: def factorial(n): if n == 0: n = 1 fact = 1 for x in xrange(1, n+1): fact = fact * x # This could be replaced by fact *= x return fact Or you could do something a little more advanced: def factorial(n): if n == 0: n = 1 return reduce(lambda x,y: x*y, xrange(1,n+1)) But that's probably a little beyond your comprehension level at this point. HTH, Wayne
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor