Python:尽管已将变量定义为整数,但为什么仍将其视为“NoneType”?

Yui*_*Yui 2 python recursion return typeerror

我正在用 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)
Run Code Online (Sandbox Code Playgroud)

让我感到困惑的部分是当它返回TypeError 时,特别是对于我尝试从 n 和 m 中加或减 1 的计算(m,n)中的行。

print(n + 1)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
Run Code Online (Sandbox Code Playgroud)

我知道 Python 将所有输入都作为字符串,这就是为什么我在脚本的最开始使用 int() 专门转换输入的原因。然而,TypeError 似乎暗示在compute(m, n) 中,m 和n 不是int,而是NoneType,因此它们不能相加或相减。这是为什么,我该如何解决?

lif*_*nce 6

任何富有成效的递归函数都必须有一个或多个返回语句。参考这个

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))
Run Code Online (Sandbox Code Playgroud)

应该像你期望的那样工作。

  • 最好解释一下您实际更改了什么以及为什么它解决了问题,而不是仅仅放置一段代码 (2认同)