2016-02-29 67 views
0

在以下代碼中,變量levelsToGo在遞歸調用getAllStringNames()時意外更新。當它回到棧來彈出時,我得到了傳遞給遞歸調用的levelsToGo的值,而不是先前存在的值。遞歸函數參數值根據向下遞歸值獲得更改

public List<String> getAllStringNames(Student p, Integer levelsToGo) 
{ 
    List<String> employeeSet = new ArrayList<String>(); 

    for(Student child : p.getAllSubjects()) 
    { 
     employeeSet.add(child.getRoll()); 
     if(levelsToGo > 0) 
     studentChilds.addAll(getAllStringNames(child, --levelsToGo)) 
    } 

    return employeeSet; 
} 

我第一次通過student1,levelsToGo爲1和student1有1名兒童。它遞歸調用和設置levelsToGo爲0;如果回來的第一次迭代,我們發現,價值仍然爲0。它應該是原始值1.

+0

樣本輸入和預期的輸出? –

+0

您是否期待內部遞歸調用中'levelsToGo'的更改會反映在外部遞歸調用中? –

+0

這是我做過的非常愚蠢的事情:P –

回答

3

當您在getAllStringNames()方法調用中使用它時,您將遞減levelsToGo。表達式--levelsToGo表示從levelsToGo,的值中減去1,將其存回levelsToGo,然後在方法調用中使用它。

相反,你應該寫

studentChilds.addAll(getAllStringNames(child, levelsToGo - 1)); 
1

不要遞減整型變量,通過新的整數作爲參數

studentChilds.addAll(getAllStringNames(child, levelsToGo - 1))