Я пробираюсь через онлайн-лекции MIT для классического курса 6.001: Структура и интерпретация компьютерных программ.
Я пытаюсь понять анализ сложности кода с точки зрения использования памяти и времени выполнения. В первых нескольких лекциях они представляют решение в схеме для ряда Фибоначчи.
Решение, которое они представляют в видео, имеет характеристику увеличения пространства памяти с x (производительность линейной рекурсии), что представляет большую проблему для серии Фибоначчи. Когда вы пытаетесь найти большее число Фибоначчи, пространство, необходимое для рекурсии, становится огромным.
Они предлагают попытаться найти способ получить производительность линейной итерации, когда необходимое пространство памяти остается постоянным на протяжении всего вычисления и не зависит от x.
Мое решение ниже. Мой конкретный вопрос: каков анализ производительности моего кода на схеме ниже с точки зрения использования памяти и времени выполнения?
(define (fib x)
(define (fib-helper target total current-index i-2 i-1)
(if (> current-index target)
(if (= target 1)
0
total)
(fib-helper target
(+ i-2 i-1)
(+ current-index 1)
i-1
(+ i-2 i-1))))
(fib-helper x 1 3 0 1))