Почему это выражение if-elif-else печатает 42? - PullRequest
1 голос
/ 24 апреля 2019

Я не могу понять, почему это возвращает 42. Я спросил друга, я проследил это в PythonTutor ... все еще не имеет смысла. Почему он просто не возвращает 9 до н.э. 6 - 1 = 5, 6 - 2 = 4, 5 + 4 = 9? Почему это продолжается? Что ждет? Как он знает, где остановиться?

def mystery(n):
    if n == 0:
        return 2 
    elif n == 1:
        return 4
    else: 
        return mystery(n-1) + mystery(n-2)

print(mystery(6))

Ответы [ 2 ]

4 голосов
/ 24 апреля 2019

Это называется рекурсивной функцией. Он вызывает себя (с новыми параметрами), пока не достигнет одного из «базовых вариантов» n==0 или n==1.

mystery(0) == 2
mystery(1) == 4
mystery(2) = mystery(1) + mystery(0) = 6
mystery(3) = mystery(2) + mystery(1) = 10
mystery(4) = mystery(3) + mystery(2) = 16
mystery(5) = mystery(4) + mystery(3) = 26
mystery(6) = mystery(5) + mystery(4) = 42
0 голосов
/ 24 апреля 2019

Как писал @Christian Slater, вы написали рекурсивную функцию, которую вы, вероятно, ищете:

def mystery(n):
    if n == 0:
        return 2
    elif n == 1:
        return 4
    else:
        return (n-1) + (n-2)

print(mystery(6))

вывод: 9

...