2017-08-29 53 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