On Tue, 27 Sep 2011 14:32:00 -0400 c smith <illusiontechniq...@gmail.com> wrote:
> hi list, > i understand the general idea of recursion and if I am following well > written code I can understand how it works, but when I try to write > it for myself I get a bit confused with the flow. > I was trying to turn an ackerman function into python code for > practice and I tried writing it like this: > #!/usr/bin/env python > > import sys, os > def ack(m,n): > > if m == 0: > return n+1 > elif m > 0 and n == 0: > ack(m-1,1) > elif m > 0 and n > 0: > ack(m-1,ack(m,n-1)) > > if __name__=='__main__': > sys.argv[1] = int(sys.argv[1]) > sys.argv[2] = int(sys.argv[2]) > > print ack(sys.argv[1], sys.argv[2]) > > The major problem, I think, is that I cant figure out where to turn > the args into ints. You did it right, just when you loaded them. What is not correct is to try to assign them to a property inside a standard library module. You should assign them to local variables (``m`` and ``n`` for example). > Also, does the second 'elif' make sense? I have am not familiar with the ackerman functions, but since you mentioned recursion, I suppose you wanted to recurse in those elif`s and return the result of a new call to the funtion. If that is the case, you could happily skip the "else" part of "elif" because if the ``if`` code will run, the interpreter will never reach the ``elif`` line. > I am not sure if the function can take itself as an argument. > thanks for any suggestions, this list has been a big help. Here's the code readapted (but verify it still does what is intended to!): #!/usr/bin/env python import sys, os def ack(m,n): if m == 0: return n+1 if m > 0: if n == 0: return ack(m-1,1) if n > 0: return ack(m-1,ack(m,n-1)) raise BaseException('Something is wrong here!') if __name__=='__main__': m = int(sys.argv[1]) n = int(sys.argv[2]) print ack(m, n) HTH! /mac _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor