Если быть более точным, предположим, что у вас есть такая функция:
T(n) = T(n-1) + T(n-1) + T(n-1), T(0) = 1
Способ, которым это написано. Сложность по времени точно равна O (3 ^ n).
Ваша функциянемного лучше, чем эта функция, но все же сложность по времени та же O (3 ^ n)
Теперь, если мы переписаем мой предложенный код, например:
T(n) = 3 * T(n-1), T(0) = 1
Сложность просто O (n)!потому что результаты предыдущих вызовов повторно используются без повторного вызова.
Так что в вашей реализации, если у вас может быть буфер, чтобы не вызывать, а просто использовать ранее вызванные значения (некоторые языки фактически могут это поддерживать), то сложностьухудшится до O (n).