Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java递归方法,一次在一个字符串中打印一个单词,无需循环_Java_String_Recursion - Fatal编程技术网

Java递归方法,一次在一个字符串中打印一个单词,无需循环

Java递归方法,一次在一个字符串中打印一个单词,无需循环,java,string,recursion,Java,String,Recursion,对于这个程序,其思想是使用递归方法一次在字符串中打印一个单词,假设空格之间只有一个单词。但是,当我按原样运行这个程序时,它会打印字符串本身 public static void stringByWords(String s) { if (s.isEmpty()) return; if (s.indexOf(" ") == 1) stringByWords(s.substring(s.indexOf(" ") + 1) + "\n");

对于这个程序,其思想是使用递归方法一次在字符串中打印一个单词,假设空格之间只有一个单词。但是,当我按原样运行这个程序时,它会打印字符串本身

public static void stringByWords(String s) {


    if (s.isEmpty())

        return;

    if (s.indexOf(" ") == 1)

     stringByWords(s.substring(s.indexOf(" ") + 1) + "\n");

    System.out.println(s);


}//end stringByWords

我意识到,作为一种只包含一个循环的迭代方法,这样做会容易得多,但我需要按照指示使用递归。任何关于我做错了什么的提示都将不胜感激

递归的诀窍是遵循标准模式

func(context)
    if context is very simple
        process context
    else
        break context into several pieces
            call func on each piece
对于你的情况,简单的情况是一个没有空格的单词。否则,分为两部分,并调用每一部分:

void printWords(String str) {
    int space = str.indexOf(' ');
    if (space == -1) {
        System.out.println(str);
    } else {
        printWords(str.substring(0, space));
        printWords(str.substring(space + 1));
    }
}

递归的技巧是遵循标准模式

func(context)
    if context is very simple
        process context
    else
        break context into several pieces
            call func on each piece
对于你的情况,简单的情况是一个没有空格的单词。否则,分为两部分,并调用每一部分:

void printWords(String str) {
    int space = str.indexOf(' ');
    if (space == -1) {
        System.out.println(str);
    } else {
        printWords(str.substring(0, space));
        printWords(str.substring(space + 1));
    }
}

好的,在根据我得到的提示修改了我的代码之后,它似乎可以正常工作。我会把固定的代码放在这里,以防它对其他人有帮助。感谢那些帮助过我的人

public static void stringByWords(String s) {

    int space = s.indexOf(' ');

    if (s.isEmpty()) //error case

        return;

    if (space == -1) { //base case

        System.out.println(s);
    }
    else { 

        stringByWords(s.substring(0, space));//recursive steps
        stringByWords(s.substring(space + 1));

    }//end else


}//end stringByWords

好的,在根据我得到的提示修改了我的代码之后,它似乎可以正常工作。我会把固定的代码放在这里,以防它对其他人有帮助。感谢那些帮助过我的人

public static void stringByWords(String s) {

    int space = s.indexOf(' ');

    if (s.isEmpty()) //error case

        return;

    if (space == -1) { //base case

        System.out.println(s);
    }
    else { 

        stringByWords(s.substring(0, space));//recursive steps
        stringByWords(s.substring(space + 1));

    }//end else


}//end stringByWords

哦,我明白了。我忘了我需要更新字符串,这是我的错误。谢谢你关于递归的提示,这确实很有帮助。哦,我明白了。我忘了我需要更新字符串,这是我的错误。谢谢你关于递归的提示,这确实很有帮助。