public class FindSum
{
private static int sum(int n)
{
if (n==1)
return 1;
else
return n + sum (n-1);
}
public static int getSum(int n)
{
if (n>0)
return sum(n);
else
{
throw new IllegalArgumentException
("Error: n must be positive");
}
}
}
根据我的书,这在测试之前测试n> 0。我不明白为什么如果测试“if(n> 0)”出现在算法之后会出现这种情况。为了完成这个测试,不应该翻转这两种方法吗?
答案 0 :(得分:0)
他们写的顺序并不重要,而是执行的顺序至关重要。
如果检查成功,getSum
明确调用sum
,那么只要您拨打getSum
,就不用担心会错过该检查。
答案 1 :(得分:0)
在Java中,方法在类中的顺序无关紧要。请注意,getSum()正在调用sum()。
那么考虑如果我们调用getSum(0)会发生什么? if条件会失败并且什么都不会发生,我们会直接找到错误。 如果我们打电话给getSum(5)怎么办? 然后我们将返回sum(5)。 但什么是总和(5)?现在我们发现自己在sum()方法中我们做递归的东西,直到我们到达基本情况,我们最终将返回1 + 14。