Я согласен с pgaur и rickerbh, сложность рекурсивного Фибоначчи - O (2 ^ n).
Я пришел к такому же выводу довольно упрощенно, но, по-моему, все еще верный аргумент.
Во-первых, нужно выяснить, сколько раз вызывается рекурсивная функция Фибоначчи (F () с этого момента) при вычислении N-го числа Фибоначчи. Если он вызывается один раз на число в последовательности от 0 до n, то у нас есть O (n), если он вызывается n раз для каждого номера, то мы получаем O (n * n) или O (n ^ 2), и так далее.
Таким образом, когда F () вызывается для числа n, число обращений к F () для данного числа от 0 до n-1 увеличивается с приближением к 0.
В качестве первого впечатления мне кажется, что, если мы представим это визуально, то для данного числа вызывается отрисовка единицы измерения за один раз, когда F () получает мокрую форму пирамиды (то есть, если мы центрируем единицы по горизонтали ). Что-то вроде этого:
n *
n-1 **
n-2 ****
...
2 ***********
1 ******************
0 ***************************
Теперь вопрос в том, насколько быстро увеличивается основание этой пирамиды с ростом n?
Давайте рассмотрим реальный случай, например F (6)
F(6) * <-- only once
F(5) * <-- only once too
F(4) **
F(3) ****
F(2) ********
F(1) **************** <-- 16
F(0) ******************************** <-- 32
Мы видим, что F (0) вызывается 32 раза, что составляет 2 ^ 5, что для данного примера составляет 2 ^ (n-1).
Теперь мы хотим знать, сколько раз F (x) вызывается вообще, и мы можем видеть, что количество вызовов F (0) является лишь частью этого.
Если мы мысленно переместим все * из строк F (6) в F (2) в линию F (1), мы увидим, что строки F (1) и F (0) теперь равны по длине. Это означает, что общее время F () вызывается, когда n = 6 равно 2x32 = 64 = 2 ^ 6.
Теперь с точки зрения сложности:
O( F(6) ) = O(2^6)
O( F(n) ) = O(2^n)