Рекурсия в матрице с++
Разработать функцию для извлечения из заданной матрицы вещественных чисел всех строк, в которых наименьший элемент не является последним (Изъятие строки заключается в подтягивании всех последующих строк вверх). С клавиатуры ввести матрицу действительных чисел. На основе разработанных функций проверить строки введенной матрицы и изъять те, которые не соответствуют условию минимального последнего элемента. Напечатать сокращенную матрицу.
Обязательное условие: сделать с помощью рекурсии.
Вот эта программа, сделанная без помощи рекурсии (вроде работает), нужно с помощью рекурсии.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define n 7
#define m 5
void delete_row_it(float**, int, int);
int main() {
system("chcp 1251");
srand(time(NULL));
int i, j;
float matrix[n][m], *M;
M = matrix;
puts("\tЗаданная матрица");
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
matrix[i][j] = rand() % 20 - 10;
printf("%8.2f", *(M + i*m + j));
}
puts("");
}
puts("");
/*matrix[0][m - 1] = -30;
matrix[1][m - 1] = 30;
matrix[2][m - 1] = -30;
matrix[3][m - 1] = 30;
matrix[4][m - 1] = -30;
matrix[5][m - 1] = 30;
matrix[6][m - 1] = -30;*/
delete_row_it(matrix, n, m);
return 0;
}
void delete_row_it(float** matrix, int r, int c) {
float* M;
M = matrix;
float min, el;
int i, j, ind_r, ind_c;
for (i = 0; i < r; i++) {
min = *(M + i*c);
ind_r = i;
ind_c = 0;
for (j = 0; j < c; j++) {
el = *(M + i * c + j);
if (el < min) {
min = el;
ind_r = i;
ind_c = j;
}
}//printf("\n ** min = %f, ind_r = %d, ind_c = %d **", min, ind_r, ind_c);
if (ind_c != c - 1) {
for (int a = 0; a < r - ind_r - 1; a++) {
for (int b = 0; b < c; b++) *(M + (ind_r + a) * c + b) = *(M + (ind_r + a + 1) * c + b);
}r--; i--;
}
}
puts("\n\tСформированая матрица");
for (i = 0; i < r; i++) {
for (j = 0; j < c; j++) {
printf("%8.2f", *(M + i * c + j));
}puts("");
}puts("");
}