寻找带有一些递归的手,我知道这是一个简单的问题在某处退出但不确定如何/在哪里!
这是我的递归方法:
public static int getNumAppearances(myList<String> l, String word)
{
int index = 0;
int count = 0;
String search = word;
if(index > l.my_get_length()-1)
{
return 0;
}
else if(l.my_get_element(index).equals(search))
{
count++;
index++;
}
return count + getNumAppearances(l, word);
}
干杯!
编辑,myList类:
public interface myList<T> {
//-------------------------------------------------------------------
// Create an empty MyList: create_empty
//-------------------------------------------------------------------
//public myList create_empty(); --> Java does not support constructors in interfaces
//-------------------------------------------------------------------
// Basic Operation --> Get number of elements in MyList: my_get_length
//-------------------------------------------------------------------
public int my_get_length();
//-------------------------------------------------------------------
// Basic Operation --> Get element at of MyList at a concrete position: my_get_element
//-------------------------------------------------------------------
public T my_get_element(int index) throws myException;
//-------------------------------------------------------------------
// Basic Operation --> Add element to MyList at a concrete position: my_add_element
//-------------------------------------------------------------------
public void my_add_element(int index, T element) throws myException;
//-------------------------------------------------------------------
// Basic Operation --> Remove element of MyList at a concrete position: my_remove_element
//-------------------------------------------------------------------
public void my_remove_element(int index) throws myException;
}
我已经意识到你理想情况下需要将一个索引传递给该方法,但不幸的是,这不是他设置它的方式!
答案 0 :(得分:0)
您似乎错误地使用了index
变量,因为每当该方法调用自身时,您总是检查相同的index
,I会建议使用index
作为方法的参数。另外,我们不是保留count
变量,而是每次找到匹配项时都可以将1
添加到结果中。
public static int getNumAppearances(List<String> list, String word, int index)
{ if(list == null || list.size() == 0 || index < 0) return -1; // you can throw an exception instead if you deem it necessary.
if(index > list.size() - 1) return 0;
else if(list.get(index).equals(word)) return 1 + getNumAppearances(list, word, index + 1);
return getNumAppearances(list, word, index + 1);
}
note - 调用方法时,请确保将0
作为参数传递给index
参数,因为此方法从开始到结束检查列表
答案 1 :(得分:0)
您可以通过修改列表来计算您的功能:
public class RecursiveListWordCount {
public static void main(String[] args) {
System.out.println(count(Arrays.asList("a", "b", "a", "b", "c"), "d"));
}
public static final int count(List<String> list, String word) {
if(list.isEmpty()) {
return 0;
}
if(list.get(0).equals(word)) {
return 1 + count(list.subList(1, list.size()), word);
} else {
return 0 + count(list.subList(1, list.size()), word);
}
}
}
在每次通话时,我检查列表是否为空,如果true
我将返回0(因为空列表中肯定没有可能相同的单词)。
然后下一个调用将添加一个子列表,删除我刚检查过的单词。
希望有所帮助,
阿图尔