为什么这段代码打印无?

时间:2014-02-19 14:22:40

标签: python recursion ackermann

Ackermann的功能已经尝试通过以下代码实现

def A(m, n):
    if m == 0:
        return n + 1
    elif m > 0 and n == 1:
        A(m - 1, 1)
    elif m > 0 and n > 0:
        A(m - 1, A(m, n - 1))

print A(4, 5)

1 个答案:

答案 0 :(得分:7)

您的函数不会为if语句的3个分支中的2个返回任何内容;只有m == 0明确返回一个值。

您还需要返回递归调用的结果:

def A(m, n):
    if m == 0:
        return n + 1
    elif m > 0 and n == 1:
        return A(m - 1, 1)
    elif m > 0 and n > 0:
        return A(m - 1, A(m, n - 1))

如果没有显式返回,则函数以默认返回值None结束。