Требуется расположить элементы массива по возрастанию через рекурсии

Простая работает корректно, а вот сложная и хвостовая нет

#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;

} 

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