Идентификация последовательности в рекурсивной функции - PullRequest
3 голосов
/ 27 апреля 2019

Мне нужно определить порядок последовательности в функции 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) выдает этот вывод, отсюда и неправильное понимание последовательности.

Ответы [ 3 ]

1 голос
/ 27 апреля 2019

В вашем вопросе, который вы повторяете перед печатью, порядок вызовов будет
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
1 голос
/ 27 апреля 2019

По сути, происходит то, что функция повторяется до того, как напечатает. Таким образом, вместо печати 4444, затем повторной печати, печати 333 и т. Д., Сначала выполняется возврат к самому нижнему уровню перед печатью результатов. Это означает, что первый вызов к функции, которая фактически завершается, является самым нижним (тот, который печатает 22), затем, после этого, вызов, производящий вывод 333, завершает, пока, наконец, начальный вызов функции завершает печать 4444.

0 голосов
/ 27 апреля 2019

Когда вы звоните 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
...