Skip to content

Commit f66d2aa

Browse files
author
meshmote
committed
Added first working ack.py
1 parent c364569 commit f66d2aa

File tree

1 file changed

+44
-1
lines changed
  • Students/RPerkins/session02

1 file changed

+44
-1
lines changed

Students/RPerkins/session02/ack.py

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,44 @@
1-
def Ack(m,n):
1+
__author__ = 'Robert W. Perkins'
2+
3+
4+
def ack(m, n):
5+
"""Return the result of the Ackerman function on m and n"""
6+
if m < 0 or n < 0:
7+
return None
8+
elif m == 0:
9+
return n+1
10+
elif m > 0 and n == 0:
11+
return ack(m-1, 1)
12+
elif m > 0 and n > 0:
13+
return ack(m-1, ack(m, n-1))
14+
15+
if __name__ == "__main__":
16+
assert ack(-1, 2) == None
17+
assert ack(2, -1) == None
18+
assert ack(-1, -1) == None
19+
assert ack(0, 0) == 1
20+
assert ack(0, 1) == 2
21+
assert ack(0, 2) == 3
22+
assert ack(0, 3) == 4
23+
assert ack(0, 4) == 5
24+
assert ack(1, 0) == 2
25+
assert ack(1, 1) == 3
26+
assert ack(1, 2) == 4
27+
assert ack(1, 3) == 5
28+
assert ack(1, 4) == 6
29+
assert ack(2, 0) == 3
30+
assert ack(2, 1) == 5
31+
assert ack(2, 2) == 7
32+
assert ack(2, 3) == 9
33+
assert ack(2, 4) == 11
34+
assert ack(3, 0) == 5
35+
assert ack(3, 1) == 13
36+
assert ack(3, 2) == 29
37+
assert ack(3, 3) == 61
38+
assert ack(3, 4) == 125
39+
# max recursion depth exceeded after this point
40+
#assert ack(4, 0) == 2**2**2-3
41+
#assert ack(4, 1) == 2**2**2**2-3
42+
#assert ack(4, 2) == (2**65536)-3
43+
#assert ack(4, 3) == (2**2**65536)-3
44+
#assert ack(4, 4) == (2**2**2**65536)-3

0 commit comments

Comments
 (0)