我对理解这种方法有疑问。 我们有一个简单的Tree-structure实现与复合模式。 所以树就是这样的:
**1
2 erwin
true 4 5 6**
所以root = 1和2有孩子(真,4,5)等...... 使用此函数,有一个在Level上计算的节点:
**public int nodeInLevel(int level){
int out =0;
if(level==0) return 1;
System.out.println("level for forLoop : "+(level)+" " +out);
System.out.println("subtrees"+this.subtrees);
for(Tree b:this.subtrees){
out += b.nodeInLevel(level-1);
System.out.println("level "+(level)+" " +out);
}
return out;
}**
for level 2 ther是4,我使用SYSo,所以我理解它是如何工作的,这是输出。
level for forLoop : 2 0
level for forLoop : 1 0
level 1 1
level 1 2
level 1 3
level 2 3
level for forLoop : 1 0
level 1 1
level 2 4
4
我不明白为什么在forEach循环中没有递减级别,因为虽然我们递归调用函数knotenInLevel(level-1) 提前致谢
答案 0 :(得分:0)
category
您不会在此代码中减少 for(Baum b:this.subtrees){
out += b.knotenInLevel(level-1);
System.out.println("level "+(level)+" " +out);
}
。您正在将level
传递给下一个递归方法调用。这意味着在递归方法的当前执行中,level-1
保持不变。
如果你改变了
level
到
out += b.knotenInLevel(level-1);
您将out += b.knotenInLevel(--level);
传递给下一个递归方法调用,此外,您将在递归方法的当前执行中递减level-1
变量的值。