Рекурсия. Перестановка элементов массива. C++

Задание звучит так: Начиная с n-ого элемента провести замену элементов между собой: 1<->n, 2<->n+1, 3<->n+2 и так далее. n вводим сами. Без рекурсии сделал, а вот с ней не могу сообразить как это делать. Помогите пожалуйста! Вот цикл без рекурсии. Но в нем есть баг, n элементов в конце не выводится,если кто-то пофиксит этот баг тоже буду благодарен.

     int sizememo, n;
cout<<"Введите количество элементов:";
cin>>sizememo;
cout<<"Введите с каким по номеру элементом хотите менять";
cin>>n;
int memo[sizememo];
for(int i = 0; i < sizememo; i++){
    memo[i] = rand() % 20;
    cout<< memo[i]<<" ";
}
cout<<endl;
for ( int nsave = n, i = 0; i < sizememo; i++,nsave++){
  memo[i] = memo[nsave];
}
//    sizememo -=n;
cout<< endl;
for ( int i = 0; i < sizememo; i++){
    cout<<memo[i]<<" ";
 }
}

Ответы (1 шт):

Автор решения: AR Hovsepyan

По вашему коду и вопросу не понятно что нужно менять например для массива { 2, 5, 6, 9, 1, 23, 56, 67 } начиная с третьей позиции. Если только первые три со второй тройкой, то, например, так:

void permutation(int* arr, const size_t size, const size_t n)
{
    static size_t i = 0, 
        j = n;
    if (j >= size || i == n)
        return;     
    int t = arr[i];
    arr[i] = arr[j];
    arr[j] = t;
    ++i;
    ++j;
    permutation(arr, size, n);
}

или

void permutation(int* arr, const int size, const int n)
{   
    static int i = 0, j = n;
    if (n >= size || i == j)
        return; 
    int t = arr[i];
    arr[i] = arr[n];
    arr[n]  = t;
    ++i;
    permutation(arr, size, n + 1);
}

В своем коде вы также допустили ошибку, о котором компилятор должен был жаловаться _ вы вводите размер массива с консоли, однако этот размер должен быть константным выражением, известным во время компиляции. Т.е. задайте конкретный константный размер массива, а не введите, или создайте динамический массив. После того как это исправите, вызовите функцию с вашими данными:

permutation(memo, sizememo, n);
→ Ссылка