Первый метод вызывает себя рекурсивно один раз , поэтому сложность составляет O (n) . Второй метод вызывает себя рекурсивно два раза , поэтому на глубину рекурсии количество вызовов удваивается, что делает метод O (2 n ) .
Разница между O (n) и O (2 n ) - это гиганти c, что делает второй метод более медленным.
Для вычисления 50-го числа вторым методом требуется 2 50 = 1125899906842624 рекурсивных вызовов. Для использования первого метода требуется всего 50 рекурсивных вызовов. ( Примечание: Эти числа не должны быть точными. Я только что добавил их, чтобы проиллюстрировать величины линейного и экспоненциального подходов.)
Здесь важно понимать, что Второй метод вычисляет число Фибоначчи одного и того же n s несколько раз. Посмотрите на исходный вызов, который вызывает себя рекурсивно с помощью n - 1 и n - 2 . Когда вы смотрите на вызов с n - 1 , вы видите, что он вызывает сам себя с n - 2 и n - 3 . Вы заметили проблему? Метод был вызван с n - 2 уже два раза. Он даже дважды вызвал себя с помощью n - 3 , когда вы посмотрите на первый вызов с помощью n - 2 . Это будет становиться все хуже и хуже по мере увеличения глубины рекурсии.
Обратите внимание, что первый метод не вызывает себя два раза с одним и тем же значением.