Рекурсия и фишки
Есть задача о фишках, необходимо ее решить рекурсией, вот условие:
Дана полоска из клеток, пронумерованных от 1 до N. Разрешено снимать или ставить фишку на первую клетку или на клетку, следующую за самой левой фишкой. Изначально строка пуста. Нужно занять все клетки. Формат входного файла
С клавиатуры вводится натуральное число N (1 ≤ N ≤ 10).
Формат выходного файла
Требуется вывести последовательность номеров клеток, с которыми совершается действие. Если фишка снимается, то номер клетки должен выводиться со знаком минус. Количество действий не должно превышать 10000. Если существует несколько возможных решений задачи, то разрешается вывести любое.
Примеры
Ввод 3
Вывод 1 2 -1 3 1
Я решаю так:
void F(int n, int i, const bool first = false)
{
if (n > 0)
{
F (n - 1, i - 1);
cout << i << " ";
if (!first)
F(n - 1, 1 - n);
else
F(n - 2, n - 2);
}
}
int main()
{
cin >> n;
F(n, n, true);
return 0;
}
Прошу помощи, что я делаю неправильно? Знаю, что переменная first лишняя, она говорит о том был ли запущен метод из main'а. Данный код решает задачу для n = 1,2,3.
Для n = 4, он выдает
1 2 -1 3 -3 -2 -1 4 1 2 -1
вместо
1 2 -1 3 -3 -2 -1 4 1 2