我正在编写一个类,用于递归追踪下限和上限,并通过返回上限值后返回到下限值来总结中间的所有值。例如调用我的代码甚至导致了一个StackOverflowError案件
System.out.println(sum(2,5));
应返回23,因为这是2 + 3 + 4 + 5 + 4 + 3 + 2
以下是我的代码针对此问题的总和。即使有一个基本情况,我仍然得到的StackOverflowError由于上线15递归调用和17
public static int sum(int lower, int upper)
{
int total = (upper - lower) + (upper - lower) + 1;
return sum(lower, upper, total);
}
public static int sum(int lower, int upper, int total)
{
if (lower < upper)
return lower + sum(lower + 1, upper, total - 1);
else if (lower == upper)
return lower + sum(lower - 1, upper, total - 1);
else if (total == 0)
return 0;
return 0;
}
public static void main(String[] args)
{
System.out.println(sum(2, 5));
}
有人可以帮我鉴定了StackOverflow上的原因,然后纠正它?
使用调试器,找出发生了什么 – Jens
这是一个无限递归....下降永远不会比上限更大。 – Nidhoegger
如果下面的解决方案解决了您的问题,您可能想要接受该解决方案。 – user3437460