Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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_Recursion - Fatal编程技术网

JAVA:帮助修复递归函数

JAVA:帮助修复递归函数,java,recursion,Java,Recursion,我必须使用递归来解决这个问题,我设法用循环很快地使它工作,但我有点被困在这个问题上。 我现在的代码是 public static String ReverseR(String n){ String finalstring=""; int i = 0; int len = n.length(); while (i < len) { finalstring += (n.charAt(len - 1)); ReverseR(n.s

我必须使用递归来解决这个问题,我设法用循环很快地使它工作,但我有点被困在这个问题上。 我现在的代码是

public static String ReverseR(String n){
    String finalstring="";
    int i = 0;
    int len = n.length();
    while (i < len) {
        finalstring += (n.charAt(len -  1));
        ReverseR(n.substring(0, len - 1));
        i++;
    }
    return finalstring;
}
公共静态字符串反转器(字符串n){
字符串finalstring=“”;
int i=0;
int len=n.length();
而(我
当我输入任何字符串时,结果字符串的长度是正确的,但只使用最后一个字母。例如:反向器(“你好”)=ooooo 有什么想法吗?

n.charAt(len-1))
改成
n.charAt(len-i))

你总是和len在同一个地方(1;)

[编辑]

while (i < len){
    finalstring += (n.charAt(len - 1 - i));
    ReverseR(n.substring(0, len - 1 - i));
    i++;
}
while(i
这将修复您的代码,但是您必须在
while
反向器(…)

重复问题,检查此项

n.charAt(len-1))
更改为
n.charAt(len-i))

你总是和len在同一个地方(1;)

[编辑]

while (i < len){
    finalstring += (n.charAt(len - 1 - i));
    ReverseR(n.substring(0, len - 1 - i));
    i++;
}
while(i
这将修复您的代码,但是您必须在
while
反向器(…)


重复问题,检查这个

递归类似于归纳法证明

  • 摆脱while循环
  • 如果要反转0个字符的字符串,很简单:只需返回“”
  • 如果要反转n个字符的字符串,请反转[0..n-2]并在最后一个字母前加上前缀。你已经在做了

  • 递归有点像归纳法的证明

  • 摆脱while循环
  • 如果要反转0个字符的字符串,很简单:只需返回“”
  • 如果要反转n个字符的字符串,请反转[0..n-2]并在最后一个字母前加上前缀。你已经在做了

  • 这里有一个完整的工作解决方案

    public static String reverse(final String s) {
        if (s == null) {
            throw new NullPointerException();
        }
    
        final int length = s.length();
        if (length <= 1) {
            return s;
        } else {
            // s = start + lastChar
            final String start = s.substring(0, length - 1); 
            final char lastChar = s.charAt(length - 1);
            return lastChar + reverse(start);
        }
    }
    
    公共静态字符串反转(最终字符串s){
    如果(s==null){
    抛出新的NullPointerException();
    }
    最终整数长度=s.长度();
    
    如果(长度这里是一个完整的工作解决方案

    public static String reverse(final String s) {
        if (s == null) {
            throw new NullPointerException();
        }
    
        final int length = s.length();
        if (length <= 1) {
            return s;
        } else {
            // s = start + lastChar
            final String start = s.substring(0, length - 1); 
            final char lastChar = s.charAt(length - 1);
            return lastChar + reverse(start);
        }
    }
    
    公共静态字符串反转(最终字符串s){
    如果(s==null){
    抛出新的NullPointerException();
    }
    最终整数长度=s.长度();
    
    if(length您的递归算法不需要任何循环,即
    while
    for
    循环。任何循环构造基本上都可以通过递归实现,而无需接触循环。基本递归字符串反转的示例如下:

    public static String reverseR(String n){
      if (n.length() <= 1) return n;
      return reverseR(n.substring(1))+n.charAt(0);
    }
    
    公共静态字符串反转器(字符串n){
    
    如果(n.length()您的递归算法不需要任何循环,即
    while
    for
    循环。任何循环构造基本上都可以通过递归实现,而不需要接触循环。基本递归字符串反转的示例如下:

    public static String reverseR(String n){
      if (n.length() <= 1) return n;
      return reverseR(n.substring(1))+n.charAt(0);
    }
    
    公共静态字符串反转器(字符串n){
    
    如果(n.length()检查此链接以获取递归帮助:使用循环或递归。不是两者都使用。检查此链接以获取递归帮助:使用循环或递归。不是两者都使用。虽然这确实解决了问题,但它不再需要递归:)(这可能是OPs作业所必需的)。这将抛出一个
    StringIndexOutOfBoundsException
    虽然这确实解决了问题,但它消除了递归的需要:)(这可能是OPs作业所必需的)。这将抛出一个
    StringIndexOutOfBoundsException
    还将“记住java中的字符串是不可变的,您需要返回修改后的字符串”“请记住,java中的字符串是不可变的,您需要返回修改后的字符串”从这里复制代码啊,很好的发现。看起来这是一种非常常见的方法!从这里复制代码啊,很好的发现。看起来这是一种非常常见的方法!