recursive function: use a global or pass a parameter?
Chris Angelico
rosuav at gmail.com
Sat Jan 17 14:27:22 EST 2015
On Sun, Jan 18, 2015 at 4:30 AM, Albert van der Horst
<albert at spenarnc.xs4all.nl> wrote:
> The proper technique is make the global local to the normal subroutine,
> then make the subroutine with those parameters you don't want to see
> also local to that subroutine.
> E.g.
>
> def fib(n):
> ' return the n-th Fibonacci number '
> a,b = 0,1
> def fib1(ap,bp):
> ' for f_n,f_n+1, return f_n+1,f_n+2 '
> return bp,ap+b
> for i in xrange(n):
> a,b = fib1(a,b)
> return a
That's a fairly useless use of a nested function... you could in-line
it without any effort at all:
def fib(n):
a,b = 0,1
for i in xrange(n):
a,b = b,a+b
return a
Even in the OP's example, where the inner function needs to call
itself recursively, it doesn't need to be a closure; a simple
out-of-line helper function does work (and has already been suggested;
Gregory was, I think, first). In my opinion, it's not materially
different from having an argument with a default.
ChrisA
More information about the Python-list
mailing list