我正在編寫一個類,用於遞歸追蹤下限和上限,並通過返回上限值後返回到下限值來總結中間的所有值。例如調用我的代碼甚至導致了一個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