gpt4 book ai didi

Java StackOverFlowError - 错误的递归调用?

转载 作者:行者123 更新时间:2023-12-02 10:53:30 27 4
gpt4 key购买 nike

我得到了一组称为“字典”的字符串,存储为字段,代表单词字典。

我要编写一个方法,它接受一个字符串参数(“短语”)并返回一个包含字典集中所有单词的集合,这些单词可以通过重新排列给定短语中的字符来实现。基本上我在字典中搜索字谜词。

这是我的代码:

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. 检查字典中是否存在在此线程中传递的可能性,由变量“chosen”表示。

  1. 如果字典确实包含这种可能性,请将其添加到调用结束时返回的名为“anagrams”的集合中。然后再次传递这种可能性,尝试从中进行其他组合。

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 的事情。

关于Java StackOverFlowError - 错误的递归调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5072985/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com