Cтек в вычислении чисел Фибоначчи с помощью древовидной рекурсии
Проследите за использованием стека в вычислении чисел Фибоначчи с помощью древовидной рекурсии:
(define (fib n)
(if (< n 2)
n
(+ (fib (- n 1)) (fib (- n 2)))))
а. Дайте формулу, зависящую от
n
, для максимальной глубины стека, требуемой при вычислении
Fib(n)
при
n ≥ 2
. Подсказка: в разделе 1.2.2 мы утверждали, что требуемый объем памяти линейно зависит от
n
.
б. Постройте формулу для количества сохранений, требуемых при вычислении
Fib(n)
, если
n ≥ 2
. Вы увидите, что количество сохранений (которое хорошо коррелирует со временем исполнения) экспоненциально растет с ростом
n
. Подсказка: пусть требуется
S(n)
сохранений при вычислении
Fib(n)
. Нужно показать, что имеется формула, которая выражает
S(n)
в зависимости от
S(n − 1)
,
S(n − 2)
и некоторой фиксированной «дополнительной» константы
k
, независимой от
n
. Приведите эту формулу и найдите, чему равно
k
. Покажите теперь, что
S(n)
выражается как
aFib(n + 1) + b
и укажите значения
a
и
b
.
Комментарии отсутствуют.