2017-10-14 54 views
0

这是我的代码:用值提前退出递归?

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包含最高值。然而,它然后再次经历了12次(递归),并最终让我获得第一个值。

我表弟的作业是要求用户输入12个数字并打印出最高数字,而且他不允许使用循环或数组。

然后我开始怀疑循环是否可能没有提供的循环(for/while等)。

问题是否可以保留从递归峰值部分的值?我尝试的任何代码都会减少,因为max变量会通过递归的每个级别进行更改。有没有办法早日退出价值?

+3

提示:你忽略了递归调用的返回值,这使得它毫无意义。问问你自己可能想用返回的值做什么... –

回答

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 = AskForNums(i + 1, max);中设置max以跟踪递归中的最佳max值。

而且没什么意义,因为你永远不会知道max值是否是最后输入的值。