On 03/28/2013 06:11 PM, Eric Parry wrote:
On Thursday, March 28, 2013 3:06:02 PM UTC+10:30, Dave Angel wrote:
<SNIP>
Are you familiar with recursion? Notice the last line in the function
r() calls the function r() inside a for loop.
So when r() returns, you're back inside the next level up of the
function, and doing a "backtrack."
When the function succeeds, it will be many levels of recursion deep.
For example, if the original pattern had 30 nonzero items in it, or 51
zeroes, you'll be 51 levels of recursion when you discover a solution.
If you don't already understand recursion at all, then say so, and one
or more of us will try to explain it in more depth.
<SNIP>
Thank you for that explanation.
No, I do not understand recursion. It is missing from my Python manual. I would
be pleased to receive further explanation from anyone.
Eric.
Recursion is not limited to Python. It's a general programming term,
and indeed applies in other situations as well. Suppose you wanted to
explain what the -r switch meant in the cp command. "r" stands for
recursion.
(example is from Linux. But if you're more familiar with Windows, it's
the /s switch in the DIR command.)
The cp command copies all the matching files in one directory to another
one. If the -r switch is specified, it then does the same thing to each
subdirectory.
Notice we did NOT have to specify sub-subdirectories, since they're
recursively implied by the first description.
Closer to the current problem, suppose you defined factorial in the
following way: factorial(0) is 1, by definition. And for all n>0,
factorial(n) is n*factorial(n-1).
So to directly translate this definition to code, you write a function
factorial() which takes an integer and returns an integer. If the
parameter is zero, return one. If the parameter is bigger than zero,
then the function calls itself with a smaller integer, building up the
answer as needed (untested).
def factorial(n):
if n==0:
return 1
val = n *factorial(n-1)
return val
--
DaveA
--
http://mail.python.org/mailman/listinfo/python-list