Рекурсия. Перестановка элементов массива. 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 шт):
По вашему коду и вопросу не понятно что нужно менять например для массива { 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);