使用值提前退出递归?

时间:2017-10-14 06:32:46

标签: c#

这是我的代码:

public static double AskForNums(int i, double max = 0)
    {     

        if (i <= 12)
        {
            Console.WriteLine("Input value for number " + i);
            double input = double.Parse(Console.ReadLine());

            if (input > max)
            {
                max = input;

            }

            AskForNums(i + 1, max);

        }           

        return max;
    }

我试图要求12个输入并返回最高值。在最后一次递归max包含最高的vallue。然而,它然后再次反向(递归)经过12次,最终留给我第一个值。

我堂兄的家庭作业是要求用户输入12个号码并打印最高号码,并且他不允许使用循环或数组。

然后我开始想知道如果没有提供的循环(for / while等),循环是否可行。

问题是否可以保留递归峰值部分的值?我尝试的任何代码都是redudant,因为max变量在每个递归级别都会发生变化。有没有办法尽早退出?

1 个答案:

答案 0 :(得分:1)

你可能真的想做这样的事情:

public static double AskForNums()
{
    return AskForNums(1, 0.0);
}

private static double AskForNums(int i, double max)
{
    if (i <= 12)
    {
        Console.WriteLine("Input value for number " + i);
        double input = double.Parse(Console.ReadLine());

        if (input > max)
        {
            max = input;
        }

        max = AskForNums(i + 1, max);
    }
    return max;
}

public static double AskForNums()方法是让球滚动,但private static double AskForNums(int i, double max)用于在代码运行时跟踪max

请注意,您需要在行max中设置max = AskForNums(i + 1, max);,以跟踪递归中的最佳max值。

由于您永远不知道max值是否是最后输入的值,因此没有必要提前退出。