Учитывая массив 2 18 3 15 3 9 7 4
Я хочу проверить рекурсивно с помощью одной функции, если массив растет по четным индексам и вниз по нечетным индексам , (Кстати, этот массив отсортирован, и мой код возвращает ложь на что)Указанный массив, по четным индексам, убедитесь, что он растет вверх, по нечетным индексам вниз
То, что я сделал:
Я создал Funtion, который проверяет, если массив будет на четном индексов и работает. Я создал еще одну функцию, которая проверяет, идет ли массив на нечетные индексы, и он не работает (возвращает нуль вместо одного).
То, что я хочу добиться:
[Решено] 1. Я хотел бы получить справку о получении второй функции для работы, это действительно странно, что он не работает, потому что он похож к первой функции.
Об этой функции я изменил эту строку if (num <= 0)
на это, если (num <= 1)
. и теперь он сортируется.
- Я хочу сделать только одну функцию, называемую, например,
SortedUpDown
, который будет проверять одновременно рекурсивно, если массив растет нечетно и вниз по четным индексам.
А вот мой полный код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int SortedDown(int *arr, int num);
int SortedUp(int *arr, int num);
int main(void)
{
int sizeOfArr = 0, i = 0, *arr, num = 0, checkIfSortedDown = -1, checkIfSortedUp = -1;
printf("Enter the size of the array : \n");
scanf("%d", &sizeOfArr);
printf("Enter %d numbers to the array \n: ", sizeOfArr);
arr = (int *)malloc(sizeOfArr * sizeof(int));
for (i = 0; i < sizeOfArr; i++)
{
scanf("%d", arr + i);
printf("%d ", arr[i]);
}
puts("");
checkIfSortedDown = SortedDown(arr, sizeOfArr);
checkIfSortedUp = SortedUp(arr, sizeOfArr);
if (checkIfSortedDown && checkIfSortedUp)
puts("Sorted");
else
puts("Not Sorted");
free(arr);
getch();
return 0;
}
int SortedDown(int *arr, int num) {
--num;//size to last index
if (num % 2 != 0) //if index is not even
--num;
if (num <= 0)
return 1;//Sorted
else if (arr[num - 2] > arr[num])
return 0;//Not sorted
else
return SortedDown(arr, num - 2 + 1);//+1 : last index to size
}
int SortedUp(int *arr, int num) {
--num;//size to last index
if (num % 2 == 0)
--num;
if (num <= 0)
return 1;//Sorted
else if (arr[num - 2] < arr[num])
return 0;//Not sorted
else
return SortedUp(arr, num - 2 + 1);//+1 : last index to size
}
Зачем вам нужна рекурсия для этого? –
Вы считаете начальный индекс как 1 или 0? – roottraveller
Решение моей первой проблемы: В этой функции я изменил эту строку 'if (num <= 0)' на это, если '(num <= 1)'. и теперь он сортируется. –