Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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,我看过很多关于使用递归反转字符串的帖子,但我喜欢使用自己的编码风格来正确理解它。无论如何,这是我的代码 private static String reverse (String s){ String rev = ""; int index = s.length()-1; if(index >= 0){ rev += s.charAt(index); index--; rev += reverse(rev);

我看过很多关于使用递归反转字符串的帖子,但我喜欢使用自己的编码风格来正确理解它。无论如何,这是我的代码

private static String reverse (String s){

    String rev = "";
    int index = s.length()-1;
    if(index >= 0){

        rev += s.charAt(index);
        index--;
        rev += reverse(rev);


    }
        return rev;

    }
基本上,当索引为-1时,每个字符的索引都会继续运行,循环停止。它读取字符串的最后一个可能的字符,但此行有错误

rev += rev(str)
这里是迭代法

String dog = "dog";
String rev = "";

int index = dog.length()-1;
while(index >= 0){
    rev+=dog.charAt(index);
    index--;

}

out.println(rev);

我相信,当该方法调用自身时,您会重置索引的值。也许更好的方法是使用一个重载方法,其中原始调用传入要处理的字符串,然后剩余调用调用一个方法,在该方法中,您传入正在生成的字符串以及正在处理的字符串的剩余部分。

递归步骤不包含变异字符串。您需要传递原始字符串的子字符串。
rev=反向(s.子字符串(0,索引))

(代表OP发布答案)

现在修好了。太谢谢你了,我索引太晚了,还传了负数

private static String reverse (String s) {

int index = s.length();
index--;
String rev = "";
if(index >= 0){
    rev += s.charAt(index);

    rev = rev + reverse(s.substring(0,index));
}

return rev;

}

是的,我正在使用java。尝试添加
System.out.println(索引)rev+=rev(str)
之前添加它,你会看到原因。我知道,但它在递减之前添加字母,然后当它返回循环时,它会被跳过,应该返回rev?对吗?好的,这个已经修好了,我只是索引太晚了,现在有意义了,谢谢。