Я погоджуюсь з 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 є 2х32 = 64 = 2 ^ 6.
Тепер, щодо складності:
O( F(6) ) = O(2^6)
O( F(n) ) = O(2^n)