3

我需要在调用 myst(n) 函数时识别它的序列顺序,然后才能给出 myst(4) 的输出。函数定义如下:

def myst(n):

    if n > 1:
        myst(n - 1)

        for i in range(n):
            print(n, end='')
        print()


myst(4)
OUTPUT

22
333
4444

但我不明白为什么 myst(4) 会给出这个输出,因此对序列有误解。

4

3 回答 3

1

在您的问题中,您在打印之前正在递归,调用顺序将是
myst(2) -> myst(3) -> myst(4)

但是如果你打印然后递归,调用顺序将变为
myst(4) -> myst(3) -> myst(2),如下所示。

def myst(n):

    if n > 1:

        for i in range(n):
            print(n, end='')
        print()
        myst(n - 1)


myst(4)
#4444
#333
#22
于 2019-04-27T16:08:29.353 回答
1

基本上发生的事情是该函数在打印之前正在递归。因此,它不是打印4444,然后是递归,打印333等,而是在打印结果之前先递归到最底层。这意味着对实际完成的函数的第一次调用是最底部的(打印的那个22),然后,产生输出的调用333完成,直到最后,初始函数调用完成到 print 4444

于 2019-04-27T16:03:36.640 回答
0

当你打电话时myst(x),你首先开始打电话myst(x-1),结束后你继续打电话myst(x)。所以你调用它到 myst(2) 然后开始处理另一个mysts。如果你想先打印它,你应该把递归调用移到底部:

def myst(n):
    if n > 1:
        for i in range(n):
            print(n, end='')
        print()
        myst(n - 1)

myst(4)
4444
333
22
于 2019-04-27T16:05:28.970 回答