我需要在调用 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) 会给出这个输出,因此对序列有误解。
我需要在调用 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) 会给出这个输出,因此对序列有误解。
在您的问题中,您在打印之前正在递归,调用顺序将是
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
基本上发生的事情是该函数在打印之前正在递归。因此,它不是打印4444
,然后是递归,打印333
等,而是在打印结果之前先递归到最底层。这意味着对实际完成的函数的第一次调用是最底部的(打印的那个22
),然后,产生输出的调用333
完成,直到最后,初始函数调用完成到 print 4444
。
当你打电话时myst(x)
,你首先开始打电话myst(x-1)
,结束后你继续打电话myst(x)
。所以你调用它到 myst(2) 然后开始处理另一个myst
s。如果你想先打印它,你应该把递归调用移到底部:
def myst(n):
if n > 1:
for i in range(n):
print(n, end='')
print()
myst(n - 1)
myst(4)
4444
333
22