Java 递归函数内部返回不';t';工作';if-short使用if

Java 递归函数内部返回不';t';工作';if-short使用if,java,recursion,Java,Recursion,我有一个奇怪的问题,我无法向自己解释,当我在return中使用short if时。这段代码(见下文)应该返回值55,但它只返回我通过值传递给它的参数10 我已经调试了函数,递归按预期工作,但它从未将+1添加到返回值中 public static int add(int i) { return i == 0 ? 0 : add(i - 1) + 1; } public static void main(String[] args) { System.out.println(add

我有一个奇怪的问题,我无法向自己解释,当我在return中使用short if时。这段代码(见下文)应该返回值55,但它只返回我通过值传递给它的参数10

我已经调试了函数,递归按预期工作,但它从未将
+1
添加到返回值中

public static int add(int i) {
    return i == 0 ? 0 : add(i - 1) + 1;
}

public static void main(String[] args) {
    System.out.println(add(10)); // returns 10
}

这怎么会不起作用呢?

您的代码按照您的要求执行。在每个递归步骤中,它从计数器中减去一个,并将1添加到结果中-因为它正在计数
i
次,所以它将返回
i

您要做的是将从
0
i
的数字相加。为了做到这一点,您需要每次向总和中添加
i
,而不是
1

public static int add(int i) {
    return i == 0 ? 0 : add(i - 1) + i; // <- like this
}
publicstaticintadd(inti){

return i==0?0:add(i-1)+i;//您的代码执行您告诉它的操作。在每个递归步骤中,它从计数器中减少一个,并将1添加到结果中-因为它正在计数
i
次,它将返回
i

您要做的是将数字从
0
相加到
i
。为此,您需要每次将
i
而不是
1
相加

public static int add(int i) {
    return i == 0 ? 0 : add(i - 1) + i; // <- like this
}
publicstaticintadd(inti){

return i==0?0:add(i-1)+i;//似乎您在添加1之前从
i
中减去1,其中
(i-1)+1
数字的总和
1+2+3+4+…+n
等于
n(n+1)/2
。计算这个值会快得多。@Obicere但那不是递归的练习:)@BenjaminGruenbaum是的。过去几次人们发布它,他们实际上一直在尝试计算这个值。知道这也是一件好事。1+1+1…=10。你想做i+(i-1)+(i-2)吗然后用+i替换+1,你要从
i
中减去1,然后再加1,用
(i-1)+1
数字之和
1+2+3+4+…+n
等于
n(n+1)/2
。计算这个值会快得多。@Obicere但那不是递归的练习:)@BenjaminGruenbaum是的。过去几次人们发布它,他们实际上一直在尝试计算这个值。知道这也是一件好事。1+1+1…=10。你想做i+(i-1)+(i-2)吗…?然后将+1替换为+1!我正要检查,是否可以缩短我已经拥有的代码,并在转换时出错。非常感谢!我正要检查,是否可以缩短我已经拥有的代码,并在转换时出错。