如果数组按升序排列,我应该返回-1。
否则,我应该返回第一个“破坏”升序的索引。
该函数应该是递归的。
请帮忙;)谢谢
递归函数
算法
int recur(int *a, int n) {
static int i=0;
if (i >= n-1) return -1;
if (a[i] > a[i+1]) return i+1;
return i++, recur(a, n);
}
从评论编辑:可以多次调用的函数(不可重入)
int recur(int *a, int n) {
static int i=0;
if (i >= n-1 || a[i] > a[i+1]) {
int ret = (i >= n-1 ? -1 : i+1);
i = 0;
return ret;
}
return i++, recur(a, n);
}
要设计递归函数,一个好主意是使用尾递归(使用好的编译器将转向迭代)。
int CheckAscendingOrder (const int *array, int size, int idx, int prec)
{
int res;
if (idx >= size)
{
res = -1;
}
else if (array[idx] < prec)
{
res = idx;
}
else
{
res = CheckAscendingOrder (array, size, idx + 1, array[idx]);
}
return res;
}
int ArrayAscending(int a[], int n)
{
static int i=0;
if(i==n) return 1;
return (a[i]<a[i+++1] && ArrayAscending(a, n));
}
返回 0 -- 如果数组不是升序排列。
返回 1 -- 如果数组按升序排列。
像这样的东西应该可以工作......(但请描述你所说的递归......)
int ascending_check (int* in_tab, int tab_size)
{
int i=0;
int previous_value = INT_MIN //in limits.h
for (i=0;i<tab_size; i++)
{
if(previous_value >= in_tab[i])
{
return i;
}
}
return -1; //Ascending tab.
}
下次,请向我们提供有关您尝试过的更多信息:)