Рекуррентная формула — формула вида: an = f(n, an-1, an-2,…,an-p),
выражающая каждый член последовательности an через p предыдущих членов.
Примерами рекуррентных соотношений являются aрифметическая и геометрическая прогрессии.
Рекурсивными называются процедуры и функции, которые вызывают сами себя. Классический пример – определение факториала.
Обычное определение: n! = 1 ∙ 2 ∙ 3 ∙...∙ n
С другой стороны, факториал можно определить через факториал от меньшего числа – это рекурсивное определение факториала:
Примеры рекурсивных функций: вычисление факториала:
Си |
Паскаль |
/* Факториал */ double Factorial(int N) { double F; if (N< = 1) F = 1.; else F = Factorial(N-1)*N; return F; } |
/* Факториал */ function Factorial (n: integer): integer; begin if (n < = 1) then Factorial := 1 else Factorial = Factorial(n-1)*n; end;
|
Динамическое программирование – способ решения задачи путем разбиения их на более простые задачи. Он применим к задачам, выглядящим как набор перекрывающихся подзадач, сложность которых чуть меньше исходной.
Ключевая идея достаточно проста: для того, чтобы решить поставленную задачу, требуется решить отдельные задачи (подзадачи), затем объединить решения подзадач в общее решение.
Суть метода динамического программирования в том, чтобы решать каждую подзадачу только один раз, сократив тем самым количество, а значит и время, вычислений.