对于arrayList的每个循环和递归

时间:2015-08-23 14:42:28

标签: java recursion

我对理解这种方法有疑问。 我们有一个简单的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) 提前致谢

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变量的值。