我正在處理項目歐拉數5.我沒有谷歌搜索,因爲這通常會導致與答案的SO。所以,這是我得到的:如何擺脫這個循環
private int Euler5(int dividend, int divisor)
{
if (divisor < 21)
{
// if it equals zero, move to the next divisor
if (dividend % divisor == 0)
{
divisor++;
return Euler5(dividend, divisor);
}
else
{
dividend++;
return Euler5(dividend, 1); // move to the dividend
}
}
// oh hey, the divisor is above 20, so what's the dividend
return dividend;
}
在我看來,這是有道理的。然而,VS2012給了我一個StackOverFlowException,表明我確保我沒有處於無限循環或使用遞歸。我的問題是,爲什麼這是一個無限循環?我有一種感覺,我錯過了一件完全愚蠢的事情。
編輯
由於人們似乎保持張貼,我要重申的是,我沒有使用谷歌,怕跌倒的答案。我不想要這個問題的答案。我只想知道爲什麼我得到這個例外。
即使沒有無限遞歸,您可能只是吹了堆棧。許多這些問題都是專門設計得足夠大,以致代碼需要相當好地擴展。您可能只想在這裏使用非遞歸方法並將其重構爲循環。 – Servy
@Servy:似乎我還有更多要了解堆棧以及它的工作原理。謝謝。 – MyCodeSucks
這仍然會導致堆棧溢出,但是當您重新啓動時,您不需要檢查1的除數,所有整數都可以被1除盡。您也可以將您的股息增加2(甚至10)。只是一些提示,當你變成一個循環 – Cemafor