Вычисление чисел Фибоначчи: различия между версиями
Содержимое удалено Содержимое добавлено
Oleg4280 (обсуждение | вклад) оформление |
|||
Строка 6:
== Рекурсивное решение ==
Если напрямую написать решение этой задачи, переписав рекурсию в код, то получим экспоненциальное время выполнения, ведущее себя примерно как <math> \Phi^n </math>, где <math> \Phi </math> — [[w:золотое сечение|золотое сечение]].
Приведем [[C++]] — код этой функции:
Строка 28:
== Решение с помощью динамического программирования ==
В данном случае организовать запоминание перекрывающихся подзадач очень легко — заведем массив dp, dp[i] будет значением <math> F_i </math>. В этой задаче легко организовать восходящее [[w:Динамическое программирование|ДП]], так как мы знаем, что для вычисления <math>F_n</math> понадобятся <math>F_{n-1}</math> и <math>F_{n-2}</math>. Асимптотическая сложность алгоритма будет [[w:O-большое|O]](n) время и O(n) памяти.(Требуется массив и один проход по массиву).
Код функции, реализующий восходящее ДП:
Строка 145:
}
</source>
[[Категория:Математический анализ]]
|