递归检查数组是否按升序排列

时间:2013-02-06 13:48:16

标签: c

如果数组按升序排列,我应该返回-1。

否则,我应该返回第一个“破坏”升序的索引。

该函数应该是递归的。

请帮助;)谢谢

4 个答案:

答案 0 :(得分:3)

递归函数

    如果数组按升序排列,则
  • 返回-1
  • 返回失败的第一个项目的索引(表示< a [i-1])
  • 仅采用两个参数

ALGO

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);
}

答案 1 :(得分:1)

要设计一个递归函数,一个好主意是使用尾递归(通过一个好的编译器转向迭代)。

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

答案 2 :(得分:0)

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 - 如果数组按升序排列。

答案 3 :(得分:-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.
}

下次,请告诉我们您尝试过的更多信息:)