为什么递归会返回堆栈中的第一个调用而不是最后一个?

时间:2016-10-10 00:04:46

标签: java recursion

我不能为我的生活弄清楚为什么这会返回0而不是5."我"在它到达最后一个return语句之前不断增加,但它总是从堆栈中的第一个调用返回0。我认为,因为最近对堆栈的调用会在块中返回" i == 5"首先它将返回并打印5。

返回0

public static void main(String[] args) {
        System.out.println(incrementI(0));
}       


public static int incrementI(int i) {
    if (i == 5){
        return i;           
    } else {
         incrementI(i + 1);
    }

    return i;       
}

返回5

public static int incrementI(int i) {
    if (i == 5){
        return i;           
    } else {
        return incrementI(i + 1);
    }               
}

1 个答案:

答案 0 :(得分:3)

想象一下你写了这样的功能:

public static int square(int x) {
    pow(x, 2);
    return x;
}

它将计算x的平方。但是计算后的square不会影响任何东西,函数只返回x。

现在仔细查看您的代码

if (i == 5){
    return i;           
} else {
    something(i + 1);
}
return i;

如果i不是5,则会调用something(i + 1)。然后它会返回一些值,但这个值不会影响任何东西。然后incrementI函数将仅返回i,在您的情况下,它是0