如何在c#中的递归函数中添加不可访问的参数?

时间:2016-04-04 10:18:40

标签: c# recursion parameters private

我正在尝试使用必要参数编写递归函数,但我不想在调用函数时使用某些参数。

我知道如何制作可选参数,但我仍然想知道是否可以制作类似私人参数的内容':

例如,一个函数,它返回一个由10:

驱动的数字
static int foo(int par, private int count = 0)
{
    if (count == 9)
    {
        return par;
    }
    return foo(par, count + 1) * par;
}

在函数foo中,我想要参数' count'无法访问或私密。

2 个答案:

答案 0 :(得分:1)

您不能在方法调用中调用私有方法,只能使用完整方法。有一些重载,这是可能的:

你可以这样做:

private static int foo(int par, int count = 0)
{
    if (count == 9)
    {
        return par;
    }
    return foo(par, count + 1) * par;
}

public static int foo(int par)
{
    return foo(par, 0);
}

答案 1 :(得分:0)

您可以使用内部委托(作为Func<int, int>)封装实际工作并使用闭包捕获count(这将使您无需将count作为参数传递):

static int foo(int par)
{
    int count = 0;
    Func<int, int> f = null;

    f = x =>
    {
        if (count == 9)
            return par;

        count++;
        return f(x) * x;
    };

    return f(par);
}