Python:为什么尽管变量被定义为整数,但仍被视为 'NoneType'?

标签 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)

让我感到困惑的部分是当它返回 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/

相关文章:

powershell - 列出Active Directory组层次结构

ios - 如何在递归算法中保护 IOS 免受 EXC_BAD_ACCESS

c# - 从线程返回值?

Python 线程返回值

Java BNST toString

python - PyQt4 类之间的信号传递

python - 如何在不使用getattr的情况下获取一种方法的变量

python - 任何 Python IDE 都支持在调试器的断点处停止

python - Python轮子名称中的 'cp3xm'和 'cp2xm'是什么意思?

java - 动态规划过程