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

Ich versuche, den Index des Minimums zurückzugeben. Der obige Code gibt den Wert des Minimums zurück, aber ich habe Probleme, den Index zurückzugeben. Kann mir jemand helfen? Außerdem darf ich nur 2 Parameter an die Funktion, das Array und die Größe des Arrays übergeben.Return min Index rekursiv

+1

Welche Sprache ist das? C? C++? – Paul

+0

Wenn die Funktion in C oder C++ (oder einer anderen Sprache basierend auf C oder C++) ist, können Sie nicht wirklich mehrere Werte zurückgeben. Sie können es als * output * -Parameter "zurückgeben" oder indem Sie ein * pair * oder * tuple * oder * structure * oder sogar ein * array * (in einigen Sprachen) als Rückgabewert verwenden. Wie es genau funktioniert, hängt von Ihrer Sprache ab, von der wir nichts wissen. –

+0

Oder warten Sie, möchten Sie die Funktion zu ändern * nur * den Index zurückgeben, und nicht den Wert? –

Antwort

0

Siehe Code (modifiziert nur 2 Parameter zu verwenden):

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

Dank @rbaghbanli, das hilft definitiv. Gibt es eine Möglichkeit, dies zu tun, indem nur 2 Parameter an die Funktion, das Array und die Größe des Arrays übergeben werden? – JayC

+0

Sicher, modifiziert, um nur 2 Parameter zu verwenden. –

+0

Das hat es geschafft! Vielen Dank SOOOO viel @rbaghbanli – JayC

1

So etwas wird wahrscheinlich funktionieren:

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

Sie es mit f(a, 0, size-1) nennen würde.

Das heißt, ich bin mir nicht sicher, warum diese rekursiv tun wollen, wenn es einfacher scheint es in einer for-Schleife zu tun:

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