Steve Holden wrote: > Gigs_ wrote: >> sorry i think that i express wrong. having problem with english >> >> >> what i mean is how python knows to add all thing at the end of recursion >> >> >>> def f(l): >> if l == []: >> return [] >> else: >> return f(l[1:]) + l[:1] >> >> >> f([1,2,3]) >> >> recursion1 f([2,3]) + [1] >> >> recursion2 f([3]) + [2] or [2, 1]? >> >> recursion3 f([]) + [3] or [3, 2, 1] >> >> >> i dont get all this >> >> >>> def f(l): >> if l == []: >> print l >> return [] >> else: >> return f(l[1:]) + l[:1] >> >> >>> f([1,2,3]) >> [] >> [3, 2, 1] # how this come here? how python save variables from each >> recursion? >> >> >> sorry again for first post >> > I think the thing you are missing is that the recursive call f(l[1:]) in > the return statement causes the current call to be suspended until the > recursive call is complete. The new call has its own value for l, which > is the caller's l[1:]. Each new call creates a completely new namespace. > > A less complicated function might make it a little more obvious. > > def factorial(n): > print "n =", n > if n=0: > return 1 > else: > return n * factorial(n-1) > > Try running that with a few different arguments to show you how the > recursion works. > > regards > Steve >>> def factorial(n): print "n =", n if n==0: return 1 else: return n * factorial(n-1)
>>> factorial(3) n = 3 n = 2 n = 1 n = 0 6 now i understand. but one question at the end this function return 1. how python knows that it needs to multiply 1 with all recursive returns. (why python didnt sum recursive return with 1?) that will be all, thanks in advance -- http://mail.python.org/mailman/listinfo/python-list