2016-03-23 15 views
1

私は特定の数の最小の倍数を見つけなければならないProject Eulerの問題に取り組んでいます。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