Les deux C# fragments de code à produire des résultats différents (en supposant que la variable de niveau est utilisé à la fois avant et après l'appel récursif). Pourquoi?
public DoStuff(int level)
{
// ...
DoStuff(level++);
// ...
}
,
public DoStuff(int level)
{
// ...
DoStuff(level+1);
// ...
}
Après la lecture de certaines réponses ci-dessous j'ai pensé qu'il serait bon de poster des traces de la pile pour le niveau++, ++niveau et le niveau+1 pour mettre en évidence comment tromper ce problème.
J'ai simplifié pour ce post. L'appel récursif de la séquence commence avec DoStuff(1).
// niveau++
DoStuff(int level = 1)
DoStuff(int level = 2)
DoStuff(int level = 2)
DoStuff(int level = 2)
// ++niveau
DoStuff(int level = 4)
DoStuff(int level = 4)
DoStuff(int level = 3)
DoStuff(int level = 2)
// niveau+1
DoStuff(int level = 4)
DoStuff(int level = 3)
DoStuff(int level = 2)
DoStuff(int level = 1)