这是我的代码:
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
变量在每个递归级别都会发生变化。有没有办法尽早退出?
答案 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
值是否是最后输入的值,因此没有必要提前退出。