Не могу понять как работает функция по подсчету числа фибоначчи

вот, есть такой код, и я понять не могу как оно работает

мы тут вызвали фун-ю которая должна вывести 19-е число, и оно выводит
но каким образом оно работает?

если подставить, то получится F(18) + F(17) но как она понимает что это за числа такие
я просто понять не могу откуда она берёт эти числа, ведь никакая математическая формула ей дана не была

1 лайк

ну если бы ты написал “F(19)”, тогда да, а так оно подставило 19 туда и вывело F(18)+F(17), what is wrong

1 лайк

ответ меня смущает
ведь этот код выводит n-ное число из чисел Фибоначчи, в нашем случае, 19-е число, и результат 4181

аа ладно, мне стало интересно, зашел в какой то онлайн питон, написал то же самое что и ты, и вышло 4181, так и не понял что тебя не устраивает

если ты не понял как оно это придумало, то вроде в инете можно почитать

1 лайк

Функция рекурсивно вызывает саму себя. Для 19 вызовется F(18) и F(17). Для 18 F(17) и F(16) и т.д. И длиться это будет до тех пор пока n > 1, при n <= 1 вернется 1 вместо рекурсионного вызова.

1 лайк

имхо половина беды в том, что у функции бесполезное название (и как минимум не соответствует PEP8)

def calculate_fibonacci(n):
    if n <= 1:
        return n
    else:
        return calculate_fibonacci(n - 1) + calculate_fibonacci(n - 2)

Вот так понятнее? Или для начинающего лучше даже так написать:

def calculate_fibonacci(n):
    if n <= 1:
        return n
    else:
        fib_n_minus_1 = calculate_fibonacci(n - 1)
        fib_n_minus_2 = calculate_fibonacci(n - 2)
        return fib_n_minus_1 + fib_n_minus_2

Поэтому если вы понимаете, что происходит когда вы пишете:

print(calculate_fibonacci(19))

То должно быть понятно что происходит и в коде выше. Стало понятнее?

2 лайка

спасибо вам большое!

я оказывается в начале не знавал что значит рекурсия
почитал про неё, и сейчас вроде б как всё понял