Алгоритмы на С++
Решение задачи 1 главы 3
Косвенная рекурсия. Строка состоит из клеток, пронумерованных от 1 до . Состояние клетки можно изменить - если она пуста, поставить в нее шашку (занять ее), иначе убрать из нее шашку (освободить ее). Вначале строка пуста. Нужно занять все клетки, соблюдая следующее правило. Изменение клетки допустимо, если она имеет номер 1 или расположена непосредственно после занятой клетки, имеющей минимальный номер среди занятых клеток.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
void free_(int n); void fillOnly(int n) { if (n==1) cout<<"+1"; // www.itmathrepetitor.ru else { fillOnly(n-1); cout<<"+"<<n; free_(n-1); } } // www.itmathrepetitor.ru void free_(int n) { if (n==1) cout<<"-1"; else { fillOnly(n-1); cout<<"-"<<n; free_(n-1); } } void fill(int n) { if (n==1) cout<<"+1"; // www.itmathrepetitor.ru else if (n==2) cout<<"+1+2"; else { fillOnly(n-1); cout<<"+"<<n; fill(n-2); } } void itmathrepetitor_ru() { int n; // www.itmathrepetitor.ru cout<<"input n: "; cin>>n; fill(n); } |