-9

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

4

3 回答 3

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;
    }
}
于 2013-06-15T03:07:34.383 回答
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:我的代码不适用于空字符串或以空格结尾的句子。它可以很容易地修复,但为了简单起见,我没有这样做)。

于 2013-06-15T02:44:57.070 回答
0

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

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

您真正需要学习的是,递归涉及用更简单的情况来陈述您的问题(例如,句子中的字数是在没有第一个单词的情况下添加到该句子的字数上的)并具有终止条件(其中没有更多的单词了)。

于 2013-06-15T02:38:20.313 回答