如何突破这个循环

Pio*_*nom 5 c#

我正在研究Euler项目编号5.我没有使用Google搜索,因为这通常会导致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; 
    }
Run Code Online (Sandbox Code Playgroud)

在我看来,这是有道理的.然而VS2012给了我一个StackOverFlowException,表明我确保我没有进入无限循环或使用递归.我的问题是,为什么这是一个无限循环?我有一种感觉,我错过了一些完全愚蠢的东西.

编辑

由于人们似乎一直在发帖,我会重申我没有使用谷歌这一事实,因为他害怕绊倒答案.我不想要问题的答案.我只想知道为什么我得到了例外.

jas*_*son 10

当然这种逻辑会打击堆栈.想想看,如果你要实现这个逻辑来解决找到可被1-10整除的最小数字的问题,根据问题陈述,你在堆栈中至少有2520个调用:

2520是可以除以1到10中的每个数字而没有任何余数的最小数字.

对于1-20,答案显然要大得多,而且你在吹嘘堆栈也就不足为奇了.你应该找到一个非递归的解决方案.

我的问题是,为什么这是一个无限循环?

不是.堆栈的大小有限.您正在进行过多的递归调用,并最终破坏了最大堆栈大小.

我有一种感觉,我错过了一些完全愚蠢的东西.

你来对了地方.