was ist der Unterschied zwischne n-1 und --1

F_P_aus_K

Erfahrenes Mitglied
Hallo,

ich habe eine Verständnisproblem bei diesem rekursiven Aufruf:

Code:
int factorial(int n)
{
  if (n>0)
    return n*factorial(n-1);
  else
    return (1);
}

und

Code:
int factorial(int n)
{
  if (n>0)
    return n*factorial(--n);
  else
    return (1);
}

eigentlich sollten die meiner Meinung nach gleich Funktionieren
--n bedeutet doch nichts anderes als das ich vor der Zuweisung dekrementiere,also
n-1, oder ?

kann mir jemand auf die Sprünge helfen?
Danke

Frank
 
Ok, das ist ein Kopfschmerzen-verursachender Unterschied ;).
An sich geht es aber darum ob das dekrement am Anfang oder am Ende der Anweisung passiert.
Soweit ich mich erinnere:
wenn n = 1, dann ist bei
z = n++; z hinterher 1, bei
z = ++n; allerdings 2.

Wie weit dieser Wahnsinn geht weiß ich aber nicht genau ;).

PS: dein "beides dekrementiert"-phänomen wird aber wohl genau dadurch ausgelöst :).
 
Zuletzt bearbeitet:
Das Problem ist in dem Fall, dass du nicht weißt in welche richtung die Anweisung ausgeführt wird. Okay in dem Sonderfall schon. Als erstes muss die Funktion ausgeführt werden, dafür wird als erstes der Parameter übergeben und dazu preinkrement von n ausgeführt. Tja und damit ist n dann bei der Multiplikation auch schon um 1 kleiner ;) DAS ist das Problem ;)
 
Zurück