如果使用short,则返回递归函数内部不起作用

0 java recursion

我有这个奇怪的问题,我无法向自己解释,当使用short if if return.这段代码(见下文)应返回值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
}
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

Ben*_*aum 6

您的代码完成了您所说的内容.在每个递归步骤中,它从计数器中减少一个并将结果加1 - 因为它计算i时间,它将返回i.

你现在要做的是总结从数字0i.为了做到这一点,你需要每次添加i而不是1总和.

public static int add(int i) {
    return i == 0 ? 0 : add(i - 1) + i; // <- like this
}
Run Code Online (Sandbox Code Playgroud)

由于这可能是一个练习,考虑递归地实现阶乘以确保您理解概念(即,获取n和返回的函数n * (n-1) * (n-2) ...等等).