我正在用 Python 编写一个简单的脚本作为评估 Ackermann Function 的练习。 .首先,脚本要求用户输入,然后尝试计算其余部分。这是代码:
m = int(input('Please input m.\n'))
n = int(input('Please input n.\n'))
def compute(m, n):
if m == 0:
print(n + 1)
elif m > 0 and n == 0:
compute(m - 1, 1)
else:
compute(m - 1, compute(m, n - 1))
compute(m, n)
让我感到困惑的部分是当它返回 TypeError 时,特别是对于 compute(m, n) 中我尝试从 n 和 m 中加或减 1 的行。强>
print(n + 1)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
我理解Python把所有的输入都当作字符串,这也是我特地把输入转换的原因 在脚本的最开始使用 int() 。然而,TypeError 似乎暗示在 compute(m, n) 中,m 和 n 不是 int,而是 NoneType,因此它们不能被添加或减去。这是为什么,我该如何解决?
最佳答案
任何fruitful递归函数必须有一个或多个返回语句。引用this .
m = int(input('Please input m.\n'))
n = int(input('Please input n.\n'))
def compute(m, n):
if m == 0:
return n + 1
elif m > 0 and n == 0:
return compute(m - 1, 1)
else:
return compute(m - 1, compute(m, n - 1))
print(compute(m, n))
应该如您所愿地工作。
关于Python:为什么尽管变量被定义为整数,但仍被视为 'NoneType'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60770425/