2016-03-31 10 views
0
int f(int a[], int size) { 
    if (size == 1) 
     return arr[0]; 
    size--; 
    return f((arr + (arr[0] > a[size])), size); 
} 

最小のインデックスを返そうとしています。上記のコードは最小値のVALUEを返しますが、インデックスを返すのに問題があります。誰も助けてくれますか?また、関数、配列、および配列のサイズに2つのパラメータしか渡すことはできません。このような返信minインデックス再帰的に

+1

どのような言語ですか? C? C++? – Paul

+0

関数がCまたはC++(またはCまたはC++に基づく言語)の場合、実際には複数の値を返すことはできません。 *出力*パラメータとして返すことも、*対* * *タプル*や*構造*、さらには*配列*(言語によっては)を返り値として使うこともできます。正確にそれを行う方法は、私たちが何も知らないあなたの言語に依存しています。 –

+0

待つか、関数を* only *に変更したいのですか?値ではなくインデックスを返しますか? –

答えて

0

は、以下のコード(のみ2つのパラメータを使用するように変更)を参照してください:あなたは、ループのためにそれを行うには簡単に思えるとき、再帰的にこれをしたい理由は、私はわからない、と述べた

int f(int a[], int size) { 
    if (size <= 1) 
     return 0; 
    int i = f(a, --size); 
    return a[size] < a[i] ? size : i; 
} 
+0

ありがとう@rbaghbanli、これは間違いなく役立ちます。関数、配列、および配列のサイズに2つのパラメータを渡すだけで、これを行う方法はありますか? – JayC

+0

確かに、2つのパラメータのみを使用するように修正されました。 –

+0

これはそれでした!多くの@ rbaghbanli SOOOOありがとう – JayC

1

何かはおそらく動作します:

size_t f(int a[], size_t low_index, size_t high_index) { 
    if (low_index == high_index) { 
     return low_index; 
    } 

    if (arr[low_index] > arr[high_index]) { 
     low_index++; 
    } else { 
     high_index--; 
    } 

    return f(a, low_index, high_index); 
} 

あなたはf(a, 0, size-1)でそれを呼び出すと思います。

size_t f(int a[], size_t size) { 
    size_t min_index = 0; 
    int min_value = a[0]; 
    for (size_t i = 1; i < size; ++i) { 
     if (a[i] < min_value) { 
      min_value = a[i]; 
      min_index = i; 
     } 
    } 

    return min_index; 
}