2016-03-23 40 views
1

Belirli bir sayının en küçük katını bulmak zorunda olduğum Project Euler'ın bir sorunu üzerinde çalışıyorum.Stackoverflow istisnası - çoklu hesaplama

Şu anda 20 0 girdiğimde, 10 ancak numaralı bir başlangıç ​​kodu için kod çalışıyor, stackoverflow istisnası alıyorum. Ne yaptığımı anlayamıyorum yanlış yapıyorum.

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; 
    } 
} 

Herhangi bir yardım, memnuniyetle karşılanır.

cevap

1

Tahminimce, işlevinizi tekrarlı olarak çağırıyorsunuz diye stackoverflow istisnası olsun.

Yinelemeyi kaldırmak için kodunuzu yeniden kodlayın.

+0

Gerçekten de, özyineyi ihmal edebilirdim. Bu özyinelemenin ortadan kaldırılması sorunu çözdü. Bunu neden görmediğimi anlamıyorum, çok teşekkürler! Stackoverflow bana izin verdiğinde bu cevabı kabul edeceğim. – Tikkes