java - 递归方法中的堆栈溢出错误

标签 java recursion methods stack-overflow

我的方法应该反转给定字符串的偶数索引。

使用更新的代码编辑:

public static String revEven(String inString)
{
  String tempString = new String();

  if (inString.length() <= 2)
     return inString;
  if (inString.length() == 3)
  {
     tempString += inString.charAt(2);  
     tempString += inString.charAt(1);
     tempString += inString.charAt(0);

     return tempString;
  }
  if (inString.length() % 2 == 0)
  {
     return tempString += 
            revEven(inString.substring(0, inString.length() - 1)) +
            inString.charAt(inString.length() - 1);
  }
  else
  {
     return tempString += 
            inString.charAt(inString.length() - 1) + 
            inString.charAt(1) +
            revEven(inString.substring(2, inString.length() - 2)) +
            inString.charAt(inString.length() - 2) +
            inString.charAt(0);
  }
}

我在纸上运行了递归,它应该可以正常工作。当我输入 abcde 进行测试时,我会打印出 199cda。它应该打印出 ebcda

好像是在打印内存地址之类的,但我似乎不明白为什么。

最佳答案

您编辑的代码返回的正是它应该返回的内容。

下面的代码:

return tempString += 
        inString.charAt(inString.length() - 1) + 
        inString.charAt(1) +
        revEven(inString.substring(2, inString.length() - 2)) +
        inString.charAt(inString.length() - 2) +
        inString.charAt(0);

对待第一个+作为加法运算符,而不是串联运算符,将字符串的最后一个字符添加到第二个字符。在 Java 中,可以将 char 值相加以产生数字(在 Java 中,'a'+1 = 98,char 的数值 b)。

下面的代码通过连接到一个空字符串解决了这个问题,因此让 Java 编译器知道后面的一切都是连接,而不是加法。

return tempString += "" 
    + inString.charAt(inString.length() - 1)
    + inString.charAt(1)
    + revEven2(inString.substring(2, inString.length() - 2))
    + inString.charAt(inString.length() - 2)
    + inString.charAt(0);
}

关于java - 递归方法中的堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22188371/

相关文章:

python - 如何制定一个类方法?

java - 使用 JMX/Hyperic 代理在 tc 服务器中启动/停止应用程序

java - 在 main() 中使用带有 int 的类

java - 更改 JSlider 上旋钮的宽度

java - boolean 递归第 2 部分

python - 控制嵌套列表/字符串的递归(不检查类型)

java - 线程 “main”中的异常java.lang.ArrayIndexOutOfBoundsException:2

python - 如何遍历链表 Python

Java:从方法调用返回两个整数

java - 使用同一类内部的外部方法设置构造函数变量