使用arraylist的递归方法的stackoverflower

use*_*777 2 java algorithm recursion trie data-structures

我在线程"main"java.lang.StackOverflowError中看到一个Exception.我希望知道下面的代码有什么问题.

public void addWord(String word){
    addWord(word,root,0);
}

private void addWord(String word,Node root,int pos)
{
    for(Node c:root.children)
    {
        if(word.charAt(pos)==c.letter)
        {
            addWord(word,c,pos++);
        }
    }
    Node temp = new Node();
    temp.letter=word.charAt(pos);
    temp.children=new ArrayList<Node>();
    root.children.add(temp);
    if(pos==word.length()-1)
    {
        temp.terminus=true;
        return;
    }
    if(pos<word.length()-1)
    {
        addWord(word,temp,pos++);
    }
}
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 6

从本质上讲,堆栈溢出来自于这样一个事实:您的方法不断被递归调用,并且递归永远不会结束.

一个可能的问题是这个电话:

addWord(word,temp,pos++);
Run Code Online (Sandbox Code Playgroud)

它相当于

addWord(word,temp,pos);
pos = pos + 1;
Run Code Online (Sandbox Code Playgroud)

你可能意味着:

addWord(word,temp,++pos);
Run Code Online (Sandbox Code Playgroud)

这相当于

pos = pos + 1;
addWord(word,temp,pos);
Run Code Online (Sandbox Code Playgroud)