2017-10-14 52 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值是否是最後輸入的值。