БЕСПЛАТНАЯ ПОДГОТОВКА К ЕГЭ ПО ПРОФИЛЬНОЙ МАТЕМАТИКЕ
Подготовься к ЕГЭ-2024 по профильной математике самостоятельно с помощью сервича "1С:Репетитор"!
Понятная теория и эффективные тренажеры с объяснением! Вы успеете подготовиться к экзамену! Начните занятия прямо сейчас!
design_arrow
Рекурсия и динамическое программирование

Рекурсия и динамическое программирование

Рекурсия и динамическое программирование


Рекурсия


Рекуррентная формула — формула вида: 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;


Динамическое программирование


Динамическое программирование – способ решения задачи путем разбиения их на более простые задачи. Он применим к задачам, выглядящим как набор перекрывающихся подзадач, сложность которых чуть меньше исходной.

Ключевая идея достаточно проста: для того, чтобы решить поставленную задачу, требуется решить отдельные задачи (подзадачи), затем объединить решения подзадач в общее решение.

Суть метода динамического программирования в том, чтобы решать каждую подзадачу только один раз, сократив тем самым количество, а значит и время, вычислений.