В последовательности Фибоначчи каждое число в последовательности после первых 2 является суммой предыдущих 2-х номеров:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
Когда вы пишете рекурсивную функцию, вы явно обрабатываете базовые футляры (в вашем случае fibo(0)
и fibo(1)
), а затем все что-либо вычисляется, вызывая функцию, которую вы пишете, создавая более поздние результаты operati ng на более ранних.
По определению, после первых двух чисел в последовательности число Фибоначчи представляет собой сумму из двух предыдущих чисел. Другими словами, fibo (n) = fibo (n-1) + fibo (n-2).Это то, что эта строка кода делает:
fibo(num-1) + fibo(num-2)
Он возвращает значение фибо (NUM), называя себя (то есть «рекурсия») в течение предыдущих 2-х цифр и складывая их вместе.
Поскольку они являются базовыми случаи, мы знаем, фибо (0) будет 0, и фибо (1) будет 1. Давайте посмотрим, как это работает для Фибо (4):
fibo(4) = fibo(3) + fibo(2)
fibo(4) = (fibo(2) + fibo(1)) + (fibo(1) + fibo(0))
= (fibo(2) + 1 ) + ( 1 + 0 )
= (fibo(2) + 2)
= ((fibo(1) + fibo(0)) + 2
= 1 + 0 + 2
= 3
Итак, программа в конечном итоге вычисляет правильный результат, разбивая каждое вычисление на более простые проблемы, пока не достигнет базового случая, который определил ответ. Обратите внимание, что это не очень эффективно, так как fibo
называется 9 раз для вычисления fibo(4)
.