在下面的代码中,对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有一个孩子。它递归调用并将levelsToGo
设置为0。回到第一次迭代时,我们发现该值仍为0。它应该是原始值1。 最佳答案
当您在levelsToGo
方法调用中使用getAllStringNames()
时,它会递减。表达式--levelsToGo
表示从levelsToGo
的值中减去1,将其存储回levelsToGo
,然后在方法调用中使用它。
相反,您应该写
studentChilds.addAll(getAllStringNames(child, levelsToGo - 1));
关于java - 递归函数中参数值根据递归值而变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35709246/