具有可选参数的C#递归函数

时间:2012-11-12 07:55:26

标签: c# .net-4.0 recursion optional-parameters

我在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"

我在这里遗漏了什么?谢谢!

5 个答案:

答案 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++