![]() |
#11 |
Moderator
|
Можно еще вот так попробовать расписать - вызовы функций, как они будут происходить
X++: fib 5 fib-iter 1 0 5 fib-iter 1 1 4 fib-iter 2 1 3 fib-iter 3 2 2 fib-iter 5 3 1 fib-iter 8 5 0 -> 5 Обрати внимание, что каждый последующий вызов - он самодостаточен. То есть. когда fib-iter 8 5 0 вернет 5-ку ему эту 5-ку надо просто вернуть, а не делать с ней что-то еще вверх по стеку вызовов. Это потому, что у нас последний вызов в функции выглядит так: X++: (fib-iter (+ a b) a (- count 1)))) X++: a + (fib-iter (+ a b) a (- count 1)))) Вот. Все - лучше мне уже на форуме не объяснить ![]() p.s. Цитата:
И именно эта ленивость и позволяет избавиться от повторных вычислений, не так ли?
Цитата:
обрати внимание, что для линейной оценки времени выполнения достаточно хранить только два числа последовательности Фибонначи. а для меньшей оценки (f(n) < On(n)) достаточно хранить только три числа.
![]() Последний раз редактировалось Андре; 10.02.2017 в 22:41. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |