计数单词的递归函数

时间:2013-06-15 02:28:36

标签: java recursion

你好有人能给我看一个关于如何使用递归函数计算句子中的单词的java代码吗?我很难理解递归,也许代码会帮助我理解谢谢

3 个答案:

答案 0 :(得分:1)

以下是您要求的实例:

import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 * Sample class to demonstrate recursion
 * @author vmarche
 */
public class WordCount {

    public static void main (String [] args) {

        // Infinite loop
        while (true) {

            System.out.println("Please enter a sentence:");
            BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));

            try {
                String input = keyboard.readLine();
                int count = countWords(input);
                System.out.println("Number of words: " + count);
            }

            catch (Exception e) {
                System.exit(0);
            }
        }
    }

    /**
     * Counts the words in a sentence recursively
     * @param sentence      The input sentence
     * @return              The number of words
     */
    public static int countWords (String sentence) {

        if (sentence.isEmpty())
        return 0;

        // Find the first index of a space
        int space = sentence.indexOf(" ");

        // If space exists, return count of sub-sentence
        if (space != -1)
            return 1 + countWords(sentence.substring(space + 1));
        // Else space does not exist, return 1
        else
            return 1;
    }
}

答案 1 :(得分:0)

这是递归函数的一个非常不寻常的用例,但基本思路是:

def countWordsIn (sentence):
    if sentence.hasNoMoreWords():
        return 0
    return 1 + countWords (sentence.stripFirstWord())

所有你真正需要学习的是,递归涉及根据一个更简单的情况说明你的问题(例如句子中的单词计数是一个加到该句子的单词计数而没有第一个单词)并且有一个终止条件(没有剩下的单词)。

答案 2 :(得分:0)

public class RecursionDemonstration{
    public static int numWords(String sentence)
    {
        int i = sentence.indexOf(' ');
        if (i == -1) return 1;                          //Space is not found
        return 1+numWords(sentence.substring(i+1));
    }
    public static void main(String[] args) {
        System.out.println(numWords("Hello this is a test"));
    }

}

这个概念是慢慢减小问题的大小,直到问题变得如此微不足道,以至于你可以直接解决问题 您所需要的只是一个基本案例以及问题和子问题之间的关系 (PS:我的代码不会因空格或空格结尾的句子而工作。它可以很容易地修复,但为了简单起见,我并没有这样做。)