Was ist das?
Es ist eine Funktion mit undefiniertem Verhalten. :)
Wenn das zweite Argument 0 versucht, die Funktion gleich p - 1
Speicher in der Position für den Zugriff auf den im allgemeinen als Typ unsigned size_t
ein Typ ist, konvertiert auf den Maximalwert, der in einem Objekt vom Typ size_t
gespeichert werden kann.
Außerdem wird innerhalb der Funktion die Additionsoperation verwendet, dann kann es einen Überlauf für zwei große Zahlen geben. Daher sollte der Rückgabetyp der Funktion ein anderer größerer ganzzahliger Typ sein.
Also lassen Sie uns die Funktion umschreiben, die diese Nachteile zu beseitigen. Die Logik wird dieselbe sein.
long long int whatIsThis(const int a[], size_t n)
{
return n == 0 ? 0 : a[n-1] + whatIsThis(a, n - 1);
}
oder ohne ternären mit (bedingt) Operator die Funktion
long long int whatIsThis(const int a[], size_t n)
{
if (n == 0)
{
return 0;
}
else
{
return a[n-1] + whatIsThis(a, n - 1);
}
}
wie
aussehen
Nun lassen Sie-s prüfen, wie die Funktion arbeitet. Wenn Sie ein Array wie diese haben
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Sie können es die folgende Art und Weise vorstellen (obwohl dieser Code nicht kompiliert werden)
int a[10] = { { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, 10 };
oder ähnliche
int a[10] = { a1[9], 10 };
wobei a1 [ 9] ist eine Anordnung von 9 Elementen
int a1[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
wiederum das Array a1 kann wie
int a1[9] = { a2[8], 9 };
vorstellen
wo a2
ist
int a2[8] = { 1, 2, 3, 4, 5, 6, 7, 8 };
und so weiter, dass wir endlich
int a8[2] = { a9[1], 2 };
bekommen, wo a9
int a9[1] = { 1 };
ist
Was macht die Funktion?
für das Array a
die wie
int a[10] = { { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, 10 };
oder dergleichen
int a[10] = { a1[9], 10 };
die Funktion fügt a1[9] + 10
wiederum für das Array vorgestellt wurde a1
die wie
vorstellt 0
oder wie
int a1[9] = { a2[8], 9 };
die Funktion a2[8] + 9
Wenn berechnet a1[9]
im Ausdruck a1[9] + 10
mit a2[8] + 9
zu ersetzen, dann werden wir a2[8] + 9 + 10
bekommen und so weiter.
Also die Funktion berechnet die Summe der Elemente des Arrays.
Höchste Zeit für die Verwendung eines Debuggers. \ –
Nun, wie wäre es, wenn Sie auf Papier schreiben, was passiert? Dies ist sicherlich eine Art von Hausaufgaben, um Ihnen Rekursion beizubringen, also: entweder das Programm ausführen und debuggen, oder "der Debugger sein". –
Formatieren Sie den Code. Ich denke, Sie werden den Code selbst verstehen. :) – MayurK