带可选参数的C#递归函数

带可选参数的C#递归函数,c#,.net-4.0,recursion,optional-parameters,C#,.net 4.0,Recursion,Optional Parameters,我对递归函数的可选参数有问题 下面是一个示例代码: private static void RecursiveFunction(int x, int optional = 0) { if (x < 5) RecursiveFunction(x + 1, optional++); } 我得到了以下结果(只需在即时窗口中调用此代码string.Format(“{0}-{1}”,x,可选): 我有什么遗漏吗?谢谢 更改为: RecursiveFunction(x + 1

我对
递归函数的
可选参数
有问题

下面是一个示例代码:

private static void RecursiveFunction(int x, int optional = 0)
{
    if (x < 5)
        RecursiveFunction(x + 1, optional++);
}
我得到了以下结果(只需在即时窗口中调用此代码
string.Format(“{0}-{1}”,x,可选)

我有什么遗漏吗?谢谢

更改为:

RecursiveFunction(x + 1, optional++);
//                               ^^
致:

第一个执行操作,然后递增
可选

第二个在递增
可选后执行操作

发件人:

第一种形式是前缀递增操作。调查结果 运算是操作数递增后的值

第二种形式是后缀增量操作。调查结果 运算是操作数递增之前的值


在方法调用中使用
++optional
而不是
optional++

通过使用
optional++
您将不会得到作为参数传递给函数的递增值,而是
0
将传递给每个函数调用。你的电话应该是:

RecursiveFunction(x + 1, ++optional);

您首先调用了
RecursiveFunction
,然后增加了
optional
。你需要先增加它

private static void RecursiveFunction(int x, int optional = 0)
{
    if (x < 5)
        RecursiveFunction(x + 1, ++optional);
}
private static void RecursiveFunction(int x,int可选=0)
{
if(x<5)
递归函数(x+1,++可选);
}


您需要执行
++optional
而不是
optional++

在调用之前需要递增

RecursiveFunction(x + 1, ++optional);

尝试
++optional
而不是
optional++
我会做
optional+1
。它更清晰,避免了(无用的、未使用的)副作用。可选的是每个方法调用的本地选项。@sgar91:谢谢,它起作用了。也许你应该加上它作为答案,而不是评论。@KaeL。这很酷,伙计,每个人都会犯这样的错误,而且几乎每个人都有关于Stackoverflow的问题,这让他很尴尬。:)几个月后,你将成为一名忍者回答接受!(需要等待时间间隔结束后才能接受)非常感谢!在
Google
上找不到我的关键词,我只好在这里提问D
++ var
var ++
RecursiveFunction(x + 1, ++optional);
private static void RecursiveFunction(int x, int optional = 0)
{
    if (x < 5)
        RecursiveFunction(x + 1, ++optional);
}
RecursiveFunction(x + 1, ++optional);