我不明白这个函数是如何工作的以及它是如何得到 60 的结果的

Slu*_*urm 2 python recursion function

def A(x, y):
    if x == 0:
        return y + 2
    if y == 0:
        return A(x - 1, 1) + 1
    return A(x - 1, A(x, y - 1)) * 2

print(A(1, 3))
Run Code Online (Sandbox Code Playgroud)

输出是60。我运行了代码,但我不知道您如何获得该值。对不起,这个相当愚蠢的问题。

Ed *_*ard 6

A似乎是递归的,因此当您调用 时A(1,3),它会不断调用自身。

让我们来看看它:

  • 第一次运行它x != 0,所以它不会返回y+2

  • y != 0,所以它不会返回 A(x-1, 1) + 1

  • 相反,它返回 A(x-1, A(x, y-1)) * 2

对此的看法可以概括为:

A(1,3):
    return A(x-1, A(x, y-1)) * 2
    return A(0, A(1, 2)) * 2:
        A(1,2):
            return A(x-1, A(x, y-1)) * 2
            return A(0, A(1, 1)) * 2:
                A(1,1):
                    return A(x-1, A(x, y-1)) * 2
                    return A(0, A(1, 0)) * 2:
                        A(1,0):
                            return A(x-1, 1) + 1
                            return A(0, 1) + 1:
                                A(0,1):
                                    return y+2
                                    return 3
                                3 + 1 = 4
                                return 4
                    return A(0,4) * 2:
                        A(0,4):
                            return y+2
                            return 6
                        6*2 = 12
                    return 12
            return A(0, 12) * 2:
                A(0,12):
                    return y+2
                    return 14
                14*2 = 28
            return 28
    return A(0, 28) * 2:
        A(0,28):
            return y+2
            return 30
        30 * 2 = 60
    return 60
Run Code Online (Sandbox Code Playgroud)

希望那棵“树”可以帮助您想象正在发生的事情。