#!/usr/local/bin/python2 import sys sys.setrecursionlimit(3000) def ack1(M, N): return (N + 1) if M == 0 else ( ack1(M-1, 1) if N == 0 else ack1(M-1, ack1(M, N-1))) def ack2(M, N): if M == 0: return N + 1 elif N == 0: return ack2(M - 1, 1) else: return ack2(M - 1, ack2(M, N - 1)) print ack1(0,0) # 1 print ack1(3,5) # 253 print ack2(0,0) # 1 print ack2(3,5) # 253 print ack1(4,0) # 13 # print ack1(4,1) # maximum recursion depth exceeded print ack2(4,0) # 13 # print ack2(4,1) # maximum recursion depth exceeded