首页 文章

用于具有n-ary树节点的循环递归

提问于
浏览
0

递归函数调用在达到限制后突然停止 .

当从main调用该函数时,首先传递根节点,并在循环中检查根节点的子节点的大小值,并递归地在该子节点上调用相同的函数来设置其大小值 .

我的输入是非常大的树 . 当我在设置树中元素的大小之前打印n-ary树时,列表将打印出所有元素 . 但是,在setsize()递归期间,执行在某个特定点上无意义地挂起 . 每次执行都停在同一个元素上 . 如果我在创建n-ary树时从我的输入中挂起的元素之后删除元素,则执行成功并且不会挂起 .

我尝试增加-Xss -Xmx -Xss . 仍然没用 .

我是否必须使用线程或请让我知道如果我的下面的递归方法中的任何问题上述解释的函数实现 . 谢谢!!

public void setsize(Element inEle){
        for(int i =0;i<inEle.children.size();i++){
            if(inEle.children.get(i).size==0)
            {                   
                this.setsize(inEle.children.get(i));
                i--;
            }else
            {
                if(!inEle.children.get(i).isRedefine)
                    inEle.size=inEle.size+inEle.children.get(i).size;                   
            }
        }
        inEle.size=inEle.size*inEle.occurs;
    }

2 回答

  • 0

    我认为 i++i-- 在相同条件下有问题 .

    注意:递归调用保存本地变量的状态,所以不要自己尝试 .

  • 0

    从这条线来看, inEle.size=inEle.size+inEle.children.get(i).size; 看起来Element的大小就是它下面的大小的总和 . 我看到的问题是's never any place for it to start. So, let'只是假设它在计算节点,然后你可以将实际计算改为你想要的任何东西 .

    我要做的第一件事是更改 setSize 方法也返回大小以及设置 . 如下

    public int setSize(Element parent) {
        int size = 0;
        for(Element child : parent.children()) { // enhanced for loop
            size += setSize(child);
        }
        parent.size = size + 1; // the +1 is the current node
        return size;
    }
    

    然后你可以在root上调用它:

    int treeSize = setSize(root);
    

相关问题