the return value of level++ will be level and therefore pass level into DoStuff. This could be a fairly nasty bug as the recursion will never end (from what is shown DoStuff is always being passed with the same value). Perhaps ++level or level + 1 is meant instead?
level + 1 will pass level + 1 into DoStuff and leave level unchanged for the rest of the function.
The post-increment operator (variable++) is precisely equivalent to the function
int post_increment(ref int value)
{
int temp = value;
value = value + 1
return temp;
}
while the pre-increment operator (++variable) is precisely equivalent to the function
int pre_increment(ref int value)
{
value = value + 1;
return value;
}
Therefore, if you expand the operator inline into the code, the operators are equivalent to:
DoStuff(a + 1)
int temp = a + 1;
DoStuff(temp);
DoStuff(++a)
a = a + 1;
DoStuff(a);
DoStuff(a++);
int temp = a;
a = a + 1;
DoStuff(temp);
It is important to note that post-increment is not equivalent to:
DoStuff(a);
a = a + 1;
and looking at the stack traces for the various behavior:
// level++
DoStuff(int level = 1) //original call
DoStuff(int level = 1) //level = 2 after call
DoStuff(int level = 1) //level = 2 after call
DoStuff(int level = 1) //level = 2 after call
// ++level
DoStuff(int level = 1) //original call
DoStuff(int level = 2) //level = 2 after call
DoStuff(int level = 3) //level = 3 after call
DoStuff(int level = 4) //level = 4 after call
// level + 1
DoStuff(int level = 1) //original call
DoStuff(int level = 2) //level = 1 after call
DoStuff(int level = 3) //level = 2 after call
DoStuff(int level = 4) //level = 3 after call
Additionally, as a point of style, one shouldn't increment a value unless the intention is to use the incremented value (a specific version of the rule, "don't assign a value to a variable unless you plan on using that value"). If the value i + 1 is never used again, then the preferred usage should be DoStuff(i + 1) and not DoStuff(++i).