Рекурсия - это определения объектов (понятий), при котором определение объекта строится, опираясь на само понятие объекта.
Для того, чтобы задать рекурсию, необходимо описать:
- условие остановки рекурсии (базовый случай);
- рекуррентную формулу.
В программировании если процедура вызывает сама себя, то, по сути, это приводит к повторному выполнению содержащихся в ней инструкций, что аналогично работе цикла. Рекурсия позволяет заменить цикл и в некоторых сложных задачах делает решение более понятным, хотя часто менее эффективным.
Может это:
Объяснение:
Рекурсия - это определения объектов (понятий), при котором определение объекта строится, опираясь на само понятие объекта.
Для того, чтобы задать рекурсию, необходимо описать:
- условие остановки рекурсии (базовый случай);
- рекуррентную формулу.
В программировании если процедура вызывает сама себя, то, по сути, это приводит к повторному выполнению содержащихся в ней инструкций, что аналогично работе цикла. Рекурсия позволяет заменить цикл и в некоторых сложных задачах делает решение более понятным, хотя часто менее эффективным.
//у меня прошел все тесты
#include < iostream>
#include < vector>
#include < algorithm>
using namespace std;
int abc(int a)
{
if(a > 0)
return a;
return a *= -1;
}
int main()
{
int n;
cin> > n;
vector< int> d(n+1);
//ввод
for(int i = 1; i< =n; i++)
{
cin> > d[i];
}
vector< int> b(n+1);
b[1] = d[1];
b[2] = abc(d[2] - d[1]);
//дп
for(int i = 3; i< =n; i++)
{
long a = abc( d[i] - d[i-1] );
long z = abc( 3 * ( d[i] - d[i-2] ) );
a = a + b[i-1];
z = z + b[i-2];
b[i] = min(a,z);
// cout< < b[i]< < " "< < i< < endl;
if(i == 3 & & b[i] == z)
{
b[i] -= d[i-2];
}
}
cout< < b[n]< < endl
}