2016-03-23 66 views
1

所以我正在從項目歐拉的問題,我必須找到一定數量的最小倍數。Stackoverflow異常 - 多次計算

目前它的起始編號爲10 ,但輸入20時出現,我得到一個stackoverflow異常。我似乎無法弄清楚我做錯了什麼。

public class MultipleCalculator 
{ 
    public static int StartingNumber { get; } = 0; 
    private int MultipleCypher = 20; 
    public bool MultipleFound = false; 

    public MultipleCalculator(int multipleCypher) 
    { 
    } 

    public int FindSmallestMultiple() 
    { 
     return FindMultiple(MultipleCypher); 
    } 

    private int FindMultiple(int startingNumberOfSequence) 
    { 
     while (!MultipleFound) 
     { 
      var isMultiple = IsMultiple(startingNumberOfSequence); 
      if (isMultiple) 
      { 
       MultipleFound = true; 
       return startingNumberOfSequence; 
      } 
      startingNumberOfSequence += MultipleCypher; 
      return FindMultiple(startingNumberOfSequence); 
     } 
     return -1; 
    } 

    private bool IsMultiple(int startingNumberOfSequence) 
    { 
     var dividableNumber = MultipleCypher - 1; 

     while (dividableNumber > 0) 
     { 
      if ((startingNumberOfSequence % dividableNumber) == 0) 
       dividableNumber--; 
      else 
       return false; 
     } 

     return true; 
    } 
} 

任何幫助都是值得歡迎的。

回答

1

我的猜測是你得到了stackoverflow異常,因爲你正在遞歸地調用你的函數。

重構您的代碼以刪除遞歸。

+0

事實上,我可能已經省略了遞歸。遞歸的這種移除解決了這個問題。我不明白爲什麼我甚至沒有看到這一點,非常感謝!當我使用stackoverflow時,我會接受這個答案。 – Tikkes