Java - 递归计算列表

时间:2017-05-04 01:25:35

标签: java recursion

寻找带有一些递归的手,我知道这是一个简单的问题在某处退出但不确定如何/在哪里!

这是我的递归方法:

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;

}

我已经意识到你理想情况下需要将一个索引传递给该方法,但不幸的是,这不是他设置它的方式!

2 个答案:

答案 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(因为空列表中肯定没有可能相同的单词)。

然后下一个调用将添加一个子列表,删除我刚检查过的单词。

希望有所帮助,

阿图尔