-4

配列が昇順の場合、-1 を返す必要があります。

それ以外の場合は、昇順を「台無しにする」最初のインデックスを返す必要があります。

関数は再帰的でなければなりません。

助けてください;)ありがとう

4

4 に答える 4

3

その再帰関数

  • 配列が昇順の場合は-1を返します
  • 失敗した最初のアイテムのインデックスを返します(<a [i-1]を意味します)
  • 2つのパラメータのみを取ります

アルゴ

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);
}
于 2013-02-06T14:56:54.163 に答える
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;
}
于 2013-02-06T14:01:31.120 に答える
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 -- 配列が昇順の場合。

于 2013-02-06T14:15:47.960 に答える
-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.
}

次回は、あなたが試したことについてもっと情報を教えてください:)

于 2013-02-06T13:57:56.827 に答える