Java 使用递归将前一个返回值与新值连接起来

Java 使用递归将前一个返回值与新值连接起来,java,recursion,Java,Recursion,我正在研究递归问题。在编写请求的代码后,我所在的站点将以不同的值作为输入运行代码。但是,第一次运行可以正常工作,但所有后续运行都会将第一次运行的返回值与每个后续运行的值连接起来 最后我还得到了一个堆栈溢出错误 我需要帮助 代码如下: package com.company; import static java.lang.System.*; public class Main { public static String returnValue=""; public st

我正在研究递归问题。在编写请求的代码后,我所在的站点将以不同的值作为输入运行代码。但是,第一次运行可以正常工作,但所有后续运行都会将第一次运行的返回值与每个后续运行的值连接起来

最后我还得到了一个堆栈溢出错误

我需要帮助

代码如下:

package com.company;

import static java.lang.System.*;

public class Main {

    public static String returnValue="";

    public static void main(String[] args) {
        repeat("this is fun", 1);
        out.println(returnValue);
    }
    public static String repeat(String s, int i){
        if (i==0) {
            return returnValue;
        }
        else{
            returnValue+=s;
            repeat(s,i-1);
        }
        return returnValue;
    }
}

非常感谢您的帮助。

您需要将
静态返回值
移到方法中。然后需要通过捕获内部递归调用返回的字符串来控制结果

比如:

public static String repeat(String s, int i){
    String returnValue="";
    if (i==0) {
        return returnValue;
    }
    else{
        returnValue+=s + repeat(s,i-1);
    }
    return returnValue;
}
注意:这可能不是您想要的等效算法,但它应该演示该技术

如果这是正确的解决方案,那么您可以使用以下方法进行整理:

public static String repeat(String s, int i){
    if (i==0) {
        return "";
    } else {
        return s + repeat(s,i-1);
    }
}

如果您对表达方式感到满意:

public static String repeat(String s, int i) {
  return i <= 0
         ? ""
         : s + repeat(s, i - 1);
}
公共静态字符串重复(字符串s,int i){

return我尝试将
returnValue=“”;
放在
main()中
。当我运行代码时,它只打印“this is fun”。这正是您的代码所做的。顺便说一句,您希望得到什么结果?提示:
static
。只有在递归中断条件失败时,您才会得到stackoverflow错误。您在这里传递的int值参数是什么
repeat(“this is fun”,1);
?如果是
干的!谢谢