【发布时间】:2016-01-12 03:32:47
【问题描述】:
给定一个数组2 18 3 15 3 9 7 4,我想用一个函数递归地检查数组是否在偶数索引上上升,而在奇数索引上下降。 (顺便说一下,这个数组是排序的,我的代码返回false)
我做了什么:
我创建了一个函数来检查数组是否在偶数索引上上升并且它正在工作。我创建了另一个函数来检查数组是否在奇数索引上下降并且它不工作(返回零而不是一)。
我想要达到的目标:
[已解决] 1. 我想请教第二个函数的工作,因为它与第一个函数相似,所以它不起作用真的很奇怪。
在此功能上,我已将此行 if (num <= 0) 更改为 if (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?
-
我的第一个问题的解决方案:在这个函数上,我已经将这一行
if (num <= 0)更改为 if(num <= 1)。现在已经排序了。 -
@rkm_Hodor Ofcurse 0,但在 SortedUp 上,我只考虑 a[1]、a[3].. 等等。
-
@LeeTaylor 嗯,原因之一是,我想知道更好的递归。