gpt4 book ai didi

c# - 如何跳出这个循环

转载 作者:太空狗 更新时间:2023-10-29 22:22:56 24 4
gpt4 key购买 nike

我正在研究 Project 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;
}

在我看来,这是有道理的。然而 VS2012 给了我一个 StackOverFlowException,建议我确保我没有处于无限循环或使用递归。我的问题是,为什么这是一个无限循环?我觉得我错过了一些完全愚蠢的东西。

编辑

由于人们似乎一直在发布它们,我会重申一个事实,即我没有使用 Google 是因为害怕在答案上绊倒。我不想要问题的答案。我只想知道为什么会出现异常。

最佳答案

当然,这种逻辑会破坏堆栈。想一想,如果您要实现此逻辑来解决找到可被 1--10 整除的最小数字的问题,根据 problem statement,您将在堆栈深处至少进行 2520 次调用。 :

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.

对于 1--20,答案显然要大得多,所以你输光筹码一点也不奇怪。您应该找到一个非递归解决方案。

My question is, why is this an infinite loop?

不是。堆栈的大小是有限的。您进行了过多的递归调用,最终超出了最大堆栈大小。

I've a feeling I'm missing something completely silly.

你来到了right place .

关于c# - 如何跳出这个循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16904885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com