递归加法差异

时间:2017-08-29 18:41:27

标签: java recursion syntax addition

我正在弄乱一个递归问题(在Java中),并注意到传递以下语句会产生3个不同的答案,所以如果有人告诉我差异是什么,那就好了

这是我试图递归的功能

    if(root.left != null){
        getVal(root.left, level + 1);
    }

和如果要将其切换到

    if(root.left != null){
        getVal(root.left, level++);
    }

    if(root.left != null){
        getVal(root.left, level+=1);
    }

if(root.left != null){
    getVal(root.left, level=+1);
}

我得到了不同的答案。 我知道最后2个,如何在添加1之前传递原始值,然后将其添加到值中然后将其传递,但​​不确定第一个与其余部分的区别

3 个答案:

答案 0 :(得分:1)

  • level + 1不会更改level的值,只会传递level加1
  • 的值
  • level++传递level原始值,然后将level的值增加1
  • level+=1level的值增加1,然后传递 new
  • level=+1相当于level= +1,其中+unary + operator,因此它将level设置为等于1并传递此 new 价值

更新: 第一个和第三个版本将相同的值传递给递归调用,但可能会有不同的行为,具体取决于之后是否使用变量level

答案 1 :(得分:1)

实际上你可以只进行一个简单的测试来看看发生了什么:

public static void main(String[] args){

    int a=3, b=3, c=3, d=3;
    method(a+1);       //3+1, 4 was passed into the method
    method(b++);       //post increment, 3 was passed into the method, then increase b by 1
    method(c+=1);      //add 1 to c(3), 4 was passed into the method
    method(d=+1);      //d set to 1, 1 was passed into the method

    System.out.println("(Values in main) a:" + a + " b:" + b + " c:" + c + " d:" + d);
}

public static void method(int v){
    System.out.println(v);
}

<强>输出:

4
3
4
1
(Values in main) a:3 b:4 c:4 d:1

答案 2 :(得分:0)

if(root.left != null){
    getVal(root.left, level + 1);
}

此处您将level+1传递给getVal()作为参数,但您不会自行修改level

if(root.left != null){
    getVal(root.left, level++);
}

在这里,您将level传递给方法,然后增加(因此逐字传递),您也修改level值本身(在方法调用之后)。

if(root.left != null){
    getVal(root.left, level+=1);
}

您可以将level+1传递给方法,也可以更改level本身(在通话之前)。

if(root.left != null){
    getVal(root.left, level=+1);
}

您只需将1分配给level,然后以1作为参数调用您的方法。

在所有4个案例中,你实际上做了不同的事情,因此结果不同。