在C#中使用递归函数

时间:2017-02-01 14:36:46

标签: c# recursion

我有一种方法可以使用out对它进行求和并输出。我的方法如下:

public void MyMethod(int page, string city, out int citySum)
{
    citySum = 0;

    for(int i = 0; i < 50; i++)
    {
        citySum++;
    }

    if(page < 15)
    {
       MyMethod(page + 1, city,out citySum); 
    }
}

让我感到困惑的是我想要citySum总计。{但是使用此配置,citySum在每个递归步骤变为零。如何保持citySum的值并将其传递给下一个递归步骤?

2 个答案:

答案 0 :(得分:9)

简单地引入一个新变量来暂时保存结果

public void MyMethod(int page, string city, out int citySum)
{
    citySum = 0;

    for(int i = 0; i < 50; i++)
    {
        citySum++;
    }

    if(page < 15)
    {
        int tempSum = 0;
        MyMethod(page + 1, city, out tempSum); 
        citySum += tempSum;
    }
}

或者使用ref代替

public static void MyMethod(int page, string city, ref int citySum)
{
    for(int i = 0; i < 50; i++)
    {
        citySum++;
    }

    if(page < 15)
    {
        MyMethod(page + 1, city, ref citySum); 
    }
}

Working example on Fiddle

或直接返回结果:

public static int MyMethod(int page, string city)
{
    int citySum = 0;

    for(int i = 0; i < 50; i++)
    {
        citySum++;
    }

    if(page < 15)
    {
        citySum += MyMethod(page + 1, city); 
    }

    return citySum;
}

Working example on Fiddle

答案 1 :(得分:4)

不要使用out并从方法返回int。另外使用+= 50可以使代码更清晰。

public int MyMethod(int page, string city, int citySum = 0)
{
    //for (int i = 0; i < 50; i++)
    //{
    //  citySum++;
    //}

    citySum += 50;

    if (page < 15)
    {
        return MyMethod(page + 1, city, citySum);
    }

    return citySum;
}

请注意,citySum默认设置为0,但可以通过调用方法设置。要解决此问题,您可以使用public方法通过将其更改为private来公开此方法:

public int MyMethod(int page, string city)
{
    return MyMethod(page, city, 0);
}

private int MyMethod(int page, string city, int citySum)
{
    //...