Ich kann die folgende rekursive Funktion nicht verstehen, die eine bool
zurückgibt.Rekursive Funktion zurück bool
bool p(int a[], int inf, int sup) {
if(sup==inf)
if(a[inf]>0)
return true;
else
return false;
int m=(inf+sup)/2;
bool left=p(a,inf,m);
bool right=p(a,m+1,sup);
return left && right;
}
Es sollte wahr zurück, wenn alle Elemente in (inf, sup) positiv sind oder aber falsch, aber ich kann nicht sehen, wie die Elemente, die nicht an den beiden Extrema des Arrays sind, berücksichtigt, da Die getestete Bedingung ist, dass a[inf]>0
und inf nicht während der Rekursion für left
geändert werden, während sie Werte nur im rechten Teil des Arrays für right
erhält.
Also im Grunde, da es sich von leichteren Rekursionen unterscheidet (wie die faktorielle oder Fibonacci) kann ich nicht verstehen, wie Rekursion hier funktioniert: Ich habe versucht, vom Basisfall zu starten und gehe zum zweiten Schritt, aber es ist unklar wie geht es weiter?
Kann mir jemand vorschlagen, wie man der Rekursion in diesem Fall folgt, um zu verstehen, wie diese Funktion wahr zurückgibt, wenn alle Elemente in (inf, sup) positiv sind?
'if (a [inf]> 0) Rückgabe wahr; sonst return false; 'ist unnötigerweise ausführlich. Gib 'return a [inf]> 0; ' –
@JesperJuhl Ich habe den Eindruck, dass der Autor dieses Codes nicht hier ist. Wenn ich das richtig lese. –
das ist ein seltsames Beispiel für Rekursion. Eine einfache Schleife ist sicherlich besser für diesen Fall, ich würde vorschlagen, dass Sie ein anderes Beispiel wählen, das Prinzip mit dieser Art der Halbierung ist immer das gleiche – user463035818