Следующие два фрагмента кода С# производят разные результаты (при условии, что уровень переменной используется как до, так и после рекурсивного вызова). Почему?
public DoStuff(int level)
{
// ...
DoStuff(level++);
// ...
}
public DoStuff(int level)
{
// ...
DoStuff(level+1);
// ...
}
После прочтения некоторых ответов ниже я подумал, что стоит потратить трассировки стека уровня уровня ++, ++ и уровня + 1, чтобы подчеркнуть, как обманывать эту проблему.
Я упростил их для этой публикации. Рекурсивная последовательность вызовов начинается с DoStuff (1).
//level ++
DoStuff(int level = 1)
DoStuff(int level = 2)
DoStuff(int level = 2)
DoStuff(int level = 2)
Уровень //++
DoStuff(int level = 4)
DoStuff(int level = 4)
DoStuff(int level = 3)
DoStuff(int level = 2)
//уровень + 1
DoStuff(int level = 4)
DoStuff(int level = 3)
DoStuff(int level = 2)
DoStuff(int level = 1)