-1
`/* finding the minimum number of a array */
#include<stdio.h>

int minimum(int n, int a[n], int x);

int main(void)
{

  int a[5] = { 5, 4, 3, 4, 5 };
  printf("%d \n", minimum(4, a, 0));
  return 0;
}

int minimum(int n, int a[n], int x)
{
  int minima;
  if (x >= n)
    return a[x];
  else
    minima = minimum(n, a, x + 1);
  if (a[x] > minima)
    return minima;
}
`

ちょっと、stackoverflaw でいくつかの再帰ソースを読みました。JAVA を使用した場合にも同様の問題が見つかりました。このコードがどのように機能するか説明してください。または、これは良いコーディングですか。私は再帰を学ぶために自分自身を作り、それは働いています.説明してください.

4

1 に答える 1

1

コードには 2 つの問題があります。

  • 終了が遅すぎます: あなたが戻るa[x]ときx==n- それは終わりを過ぎた 1 つの要素です。
  • が false の場合に return がありませんa[x] > minima: 関数は return なしで終了しますa[x]

これら 2 つの問題を修正するには、終了条件のチェックを変更し、不足している return を追加します。

if(x >= n-1) return a[n-1];
// You do not need an else after a return
minima = minimum(n,a,x+1);
if (a[x] > minima) return minima;
return a[x];

配列の末尾から検索を開始し、インデックス 0 に到達するまで逆方向に検索することで、1 つのパラメーターを保存できることに注意してください。

于 2013-08-24T12:48:25.317 に答える