def ackermann(m, n):
if m == 0:
return n+1
if n == 0:
return (m-1,1)
else:
return ackermann(m-1,ackermann(m,n-1))
ackermann(10,5)
获取类型错误:
Traceback (most recent call last):
File "main.py", line 11, in <module>
print(ackermann(3,4))
File "main.py", line 9, in ackermann
return ackermann(m-1,ackermann(m,n-1))
File "main.py", line 9, in ackermann
return ackermann(m-1,ackermann(m,n-1))
File "main.py", line 9, in ackermann
return ackermann(m-1,ackermann(m,n-1))
[Previous line repeated 2 more times]
TypeError: unsupported operand type(s) for -: 'tuple' and 'int'
我试图在pythontutor.com上可视化这一点,一旦m是9,n就返回元组(9,1(,错误就开始了。
当n
是0
时,返回元组而不是调用ackermann
:
def ackermann(m, n):
if m == 0:
return n+1
if n == 0:
return ackermann(m-1,1)
# Here-^
else:
return ackermann(m-1,ackermann(m,n-1))