使用递归

时间:2017-10-11 12:59:05

标签: java recursion

我在递归时遇到了问题。在编写了请求的代码之后,我正在使用的站点运行具有不同值的代码作为输入。但是,第一次运行正常,但所有后续运行都会将第一次运行的返回值与每次后续运行的值连接起来。

我最后也收到了堆栈溢出错误。

我需要帮助!

以下是代码:

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;
    }
}

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您需要将static 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);
    }
}

答案 1 :(得分:0)

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

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

你可以摆脱静态属性!