我在optional parameters
recursive functions
问题
以下是示例代码:
private static void RecursiveFunction(int x, int optional = 0)
{
if (x < 5)
RecursiveFunction(x + 1, optional++);
}
调用函数时:
RecursiveFunction(0);
我得到了以下结果(只是在即时窗口中调用此代码string.Format("{0} - {1}", x, optional)
):
"0 - 0"
"1 - 0"
"2 - 0"
"3 - 0"
"4 - 0"
我在这里遗漏了什么?谢谢!
答案 0 :(得分:7)
更改自:
RecursiveFunction(x + 1, optional++);
// ^^
要:
RecursiveFunction(x + 1, ++optional);
// ^^
第一个执行操作然后递增optional
第二个在增加optional
之后执行操作。
来自MSDN:
++ var
var ++
第一种形式是前缀增量操作。结果 operation是操作数增加后的值。
第二种形式是后缀增量操作。结果 operation是操作数增加之前的值。
答案 1 :(得分:3)
您先致电RecursiveFunction
,然后再增加optional
。你需要先增加它。
private static void RecursiveFunction(int x, int optional = 0)
{
if (x < 5)
RecursiveFunction(x + 1, ++optional);
}
答案 2 :(得分:3)
在致电之前需要递增
RecursiveFunction(x + 1, ++optional);
答案 3 :(得分:1)
在方法调用中使用++optional
代替optional++
。
通过使用optional++
,您将不会将递增的值作为参数传递给函数,而是将0
传递给每个函数调用。你的电话应该是:
RecursiveFunction(x + 1, ++optional);
答案 4 :(得分:1)
是,
您需要++optional
代替optional++