带可选参数的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);