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 .


Комментарии отсутствуют.

Необходима авторизация

Вы должны авторизоваться для создания комментария.

Вход