2017-08-29 59 views
0

我用递归问题乱搞(在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日前,一个增加了值,然后将事情的经过,但不知道第一个比其余

回答

1
  • level + 1的不同之处不改变的level值和只是传递的level的值加1
  • level++传递的level原始值,然后通过递增1
  • level+=1所述的level值递增的01值由1,然后通过这个
  • level=+1相当于level= +1其中+unary + operator,所以它设置level等于1,并将此

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

+0

第一项和第三项可以采取不同的进一步。 –

+0

@RomanPuchkovskiy好点,我补充说明了! – mosene

+0

是否有可能告诉我第一和第三种情况可能会有所不同?因为在我的情况下,我实际上得到了不同的结果 –

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

在这里,你传递给level+1getVal()说法,但您不要修改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); 
} 

在这里,你只分配给1level1调用你的方法作为参数。

在所有4种情况下,你实际上做了一些不同的事情,因此产生了不同的结果。

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); 
} 

输出:如果`使用level`值

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