Ich rufe die faktorielle Funktion auf, die auf folgende Weise durch Referenz definiert wird.Warum wird der Code beim Ändern der Reihenfolge in der Zuweisungsanweisung anders implementiert?
Wenn ich den Wert 5 übergeben, gibt es den Wert 1 zurück, wie ich erwartet hatte. Aber wenn ich die Fakultäts-Funktion in der folgenden Art und Weise definieren gibt es die Fakultät von 5, die 120 ist
int factorial(int &n) {
n--;
if (n>0) return (n+1)*factorial(n);
else return 1;
}
Ich vermuten, dass der Ausdruck in linearer Reihenfolge ausgewertet wird und wenn eine Funktion in dem Ausdruck all Werte aufgerufen von lokalen Variablen und den Komponentenausdrücken, die bisher im ursprünglichen Ausdruck ausgewertet wurden, werden gespeichert, und wenn die Funktion die Steuerung zurück an den Aufrufer zurückgibt, werden diese Werte, die beibehalten werden, bei der Berechnung des Ausdrucks und nicht ihrer modifizierten Werte verwendet.
Ist meine Hypothese korrekt? Erleuchte mich bitte.
Leider habe ich einen Tippfehler gemacht n und nicht n-1 –
Nach Korrektur Ihrer Tippfehler sein sollte, ist es klar, dass n doesn‘ t seinen Wert beibehalten, weil er als Referenz übergeben wird. – stefaanv
@NathanOliver Sie verwendeten dasselbe n für beide Funktionen. Ist es nicht wichtig? –