![](/img/trans.png)
[英]Recursive method call cause StackOverFlowError in kotlin but not in java
[英]Java StackOverFlowError - Bad Recursive Call?
我给了一组名为“dictionary”的字符串,存储为字段,表示单词字典。
我将编写一个接受String参数(“短语”)的方法,并返回一个包含字典集中所有单词的集合,这些单词可以通过重新排列给定短语中的字符来实现。 基本上我在字典中搜索字谜。
这是我的代码:
public Set<String> getWords(String phrase) {
Set<String> anagrams = new TreeSet<String>();
String chosen = "";
anagrams.addAll(getWords(phrase, chosen));
return anagrams;
}
public Set<String> getWords(String phrase, String chosen) {
if (phrase == null) {
throw new IllegalArgumentException();
}
Set<String> anagrams = new TreeSet<String>();
if (dictionary.contains(chosen)) {
anagrams.add(chosen);
anagrams.addAll(getWords(phrase, chosen));
} else {
for (int i = 0; i < phrase.length(); i++) {
String ch = phrase.substring(i, i + 1);
String temp = phrase.substring(0, i) + phrase.substring(i + 1);
anagrams.addAll(getWords(temp, chosen + ch));
}
}
return anagrams;
}
所以我的方法是:1。检查字典中是否有传递给该线程的可能性,由变量“selected”表示。
3 ..如果字典不包含这种可能性,修改字符串以尝试其他可能性,然后递归测试。
上面的代码产生了“堆栈溢出错误”,我的研究表明这意味着我正在进行无限递归,或者无限地一遍又一遍地传递相同的字符串。 不过,我无法看到我在做什么。 你是否可以?
public Set<String> getWords(String phrase, String chosen) {
//...
if (dictionary.contains(chosen)) {
anagrams.add(chosen);
anagrams.addAll(getWords(phrase, chosen)); //<--here we are
你正在使用完全相同的参数进行递归调用。 并且你没有做任何会使条件下次返回false
事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.