Я хочу понять рекурсивную логику c приведенной ниже программы, чтобы определить, как рассчитывается вывод - PullRequest
0 голосов
/ 14 апреля 2020

Программа

def fun(n):
    if n > 100:
        return n - 5
    return fun(fun(n+11))

print(fun(90))

Вывод -

97

Я хочу знать, почему программа была прервана, когда n было 102

1 Ответ

0 голосов
/ 14 апреля 2020

Вы не указали, ожидали ли вы другого результата, или вам просто было любопытно узнать о результате и почему;

Почему для вашего примера fun(90)

Logi c полностью возвращается из функции только тогда, когда n больше 100 во время самого вызова секунда . Если n больше 100 во время вызова fun(n + 11), это только возврат результата к следующей рекурсии.

Вот псевдо-трассировка вашей функции:

In fun with 90                          <= Initial call
In fun with 101                         <= first 'inner' (n+11) call
In > 100 with 101 and returning 96      <= greater than 100 condition
In fun with 96                          <= second 'outer' call 
In fun with 107                         <= fall through as n < 100 to 'inner' (n+11) call
In > 100 with 107 and returning 102     <= greater than 100 condition
In fun with 102                         <= second 'outer' call
In > 100 with 102 and returning 97      <= greater than 100 condition
97
...