Path: csiph.com!usenet.pasdenom.info!weretis.net!feeder1.news.weretis.net!feeder.erje.net!eu.feeder.erje.net!xlned.com!feeder3.xlned.com!news2.euro.net!newsgate.cistron.nl!newsgate.news.xs4all.nl!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.001 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'python.': 0.02; 'suppose': 0.07; '"r"': 0.09; 'explanation': 0.09; 'function,': 0.09; 'parameter': 0.09; 'returns,': 0.09; 'specified,': 0.09; 'term,': 0.09; 'val': 0.09; 'way:': 0.09; 'windows,': 0.09; 'translate': 0.10; 'python': 0.11; 'def': 0.12; 'command.': 0.16; 'definition.': 0.16; 'integer,': 0.16; 'integer.': 0.16; 'loop.': 0.16; 'nonzero': 0.16; 'received:74.208.4.195': 0.16; 'zero,': 0.16; 'applies': 0.16; 'thursday,': 0.16; 'wrote:': 0.18; 'all,': 0.19; 'meant': 0.20; 'solution.': 0.20; 'command': 0.22; 'code,': 0.22; 'programming': 0.22; 'header:User-Agent:1': 0.23; 'integer': 0.24; 'specify': 0.24; 'switch': 0.26; 'defined': 0.27; 'header :In-Reply-To:1': 0.27; 'function': 0.29; 'bigger': 0.30; 'matching': 0.30; 'closer': 0.31; 'implied': 0.31; 'linux.': 0.31; 'stands': 0.31; 'another': 0.32; 'definition': 0.35; 'no,': 0.35; 'but': 0.35; 'building': 0.35; 'doing': 0.36; 'next': 0.36; 'example,': 0.37; 'so,': 0.37; 'level': 0.37; 'thank': 0.38; 'needed': 0.38; 'to:addr:python-list': 0.38; 'files': 0.38; 'pm,': 0.38; 'explain': 0.39; 'does': 0.39; 'itself': 0.39; 'to:addr:python.org': 0.39; 'dave': 0.60; 'march': 0.61; 'skip:* 10': 0.61; "you're": 0.61; 'further': 0.61; 'first': 0.61; 'back': 0.62; "you'll": 0.62; 'skip:n 10': 0.64; 'more': 0.64; 'levels': 0.65; 'received:74.208': 0.68; 'receive': 0.70; 'anyone.': 0.74; 'discover': 0.82; 'angel': 0.91; '2013': 0.98 Date: Thu, 28 Mar 2013 19:28:27 -0400 From: Dave Angel User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130308 Thunderbird/17.0.4 MIME-Version: 1.0 To: python-list@python.org Subject: Re: Sudoku References: <9dla2a-kql.ln1@satorlaser.homedns.org> <5ce10a13-be58-4548-85df-e1d865d3304e@googlegroups.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Provags-ID: V02:K0:G5LP99j/zprfdkYkGfZD9Hkj6wuPGgEGymQbH2ntxLH stg5penqQo5+RMddGCVG/7jvD5Tnnhko9m2NdZIrSasFVikPjR 07IEavcQX9TtmL2gt/FQZNE8wYimikbKn+1N1Bs4qTzJUVfhJj 1/pmvf6v1KBWo8abw/BtIWgWcQbGIFI+MzLJgM1C1Ng9sU8SMm y8oHP/irY47F527G0XgKN58a4srAoNcyjbqXf7aE7n0IoazxdX 9hgaNVuDmEEodt4AvlPnqn0HYP6XJAsTACz9VWM+dquY/nqd/Y Gmq2C4yRKlo3oBt8W24i8nAOTLBKgJJ4rltmPYX0qsFRw7U6g= = X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 64 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1364513332 news.xs4all.nl 6933 [2001:888:2000:d::a6]:53252 X-Complaints-To: abuse@xs4all.nl Xref: csiph.com comp.lang.python:42203 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: >> >> >> 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. >> > > 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