Требуется расположить элементы массива по возрастанию через рекурсии
Простая работает корректно, а вот сложная и хвостовая нет
#include <iostream>
#include <time.h>
using namespace std;
int* complex_recursion2(int*, int, int); //Прототип complex_recursion2
int* complex_recursion1(int*, int, int); //Прототип complex_recursion1
int* form_mass(int size)
{
int* arr = new int[size];
for (int i = 0; i < size; i++)
{
arr[i] = rand() % 101 - 50;
cout << arr[i] << " ";
}
cout << " \n";
return arr;
}
int* fun(int* pMass, int size, int k = 0) {
if (k != size) {
for (int i = size - 1; i > k; --i) {
if (pMass[i] < pMass[i - 1]) {
int buf = pMass[i];
pMass[i] = pMass[i - 1];
pMass[i - 1] = buf;
}
}
fun(pMass, size, ++k);
}
return pMass;
}
int* complex_recursion1(int* pMass, int size, int k = 0) {
if (k != size) {
for (int i = size - 1; i > k; --i) {
if (pMass[i] < pMass[i - 1]) {
int buf = pMass[i];
pMass[i] = pMass[i - 1];
pMass[i - 1] = buf;
}
}
complex_recursion2(pMass, size, ++k);
}
return pMass;
}
int* complex_recursion2(int* pMass, int size, int k = 0) {
if (k != size) {
for (int i = size - 1; i > k; --i) {
if (pMass[i] < pMass[i - 1]) {
int buf = pMass[i];
pMass[i] = pMass[i - 1];
pMass[i - 1] = buf;
}
}
complex_recursion1(pMass, size, ++k);
}
return pMass;
}
int* tail_recursion(int* pMass, int size, int k = 0) {
if (k != size) {
for (int i = size - 1; i > k; --i) {
if (pMass[i] < pMass[i - 1]) {
int buf = pMass[i];
pMass[i] = pMass[i - 1];
pMass[i - 1] = buf;
}
}
return tail_recursion(pMass, size, ++k);
}
return pMass;
}
int main()
{
srand(time(NULL));
setlocale(LC_ALL, "rus");
int k;
int size = 1;
int* pMass = nullptr;
do {
cout << "1.Простая рекурсия." << endl;
cout << "2.Сложная рекурсия." << endl;
cout << "3.Хвостовая рекурсия." << endl;
cout << "4.Выход" << endl;
cin >> k;
switch (k) {
case 1:
cout << "Введите количество целых чисел: ";
cin >> size;
pMass = form_mass(size);
pMass = fun(pMass, size);
for (int i = 0; i < size; i++)
{
cout << pMass[i] << " ";
}
cout << endl;
break;
case 2:
cout << "Введите количество целых чисел: ";
cin >> size;
pMass = form_mass(size);
pMass = complex_recursion2(pMass, size, ++k);
for (int i = 0; i < size; i++)
{
cout << pMass[i] << " ";
}
cout << endl;
break;
case 3:
cout << "Введите количество целых чисел: ";
cin >> size;
pMass = form_mass(size);
pMass = tail_recursion(pMass, size, k);
for (int i = 0; i < size; i++)
{
cout << pMass[i] << " ";
}
cout << endl;
break;
case 4: break;
}
} while (k != 4);
return 0;
}