Java 递归函数内部返回不';t';工作';if-short使用if
我有一个奇怪的问题,我无法向自己解释,当我在return中使用short if时。这段代码(见下文)应该返回值55,但它只返回我通过值传递给它的参数10 我已经调试了函数,递归按预期工作,但它从未将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
+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!我正要检查,是否可以缩短我已经拥有的代码,并在转换时出错。非常感谢!我正要检查,是否可以缩短我已经拥有的代码,并在转换时出错。