Java 使用递归连接字符串

Java 使用递归连接字符串,java,recursion,Java,Recursion,这让我整天头痛,我想不出来。目标是使用times参数作为字符串能够重复自身的次数,让字符串重复自身。 例如: stringTimes("Hello", 3); //should return HelloHelloHello, stringTimes("cat", 2); //should return catcat, stringTimes("monkey", 0); //should return _____, 下面是我一直在使用的代码,我什么都没有得到。 救命啊 您的方法将转到最后一个递

这让我整天头痛,我想不出来。目标是使用times参数作为字符串能够重复自身的次数,让字符串重复自身。 例如:

stringTimes("Hello", 3); //should return HelloHelloHello,
stringTimes("cat", 2); //should return catcat, 
stringTimes("monkey", 0); //should return _____,
下面是我一直在使用的代码,我什么都没有得到。 救命啊


您的方法将转到最后一个递归调用,然后只返回一个空字符串。将其更改为:

public static String stringTimes(String theString, int times)
{   
    if (times >= 1) {
        return theString + stringTimes(theString, times - 1);
    }
    return "";
}   

这里是一个简单而压缩的例子:

public static String stringTimes(String theString, int times) {
    return times > 0 ? theString + stringTimes(theString, times - 1) : "";
}
优点:

  • 只有一行带有简单的三元运算符
  • 在我看来,在这种特殊情况下,一个返回语句更容易阅读

您需要将“加法器”传递给对stringTimes的内部调用(而不是原始字符串,theString),如果这是一个类赋值,那么它是一个非常糟糕的赋值。递归对于这项工作来说是错误的工具。如果你在教一门关于汽车力学的课,你会让学生们用一把小钳子拧紧凸耳螺母吗,“就像练习一样”?是的,但接下来还有另一个作业,要求我使用for循环
加法器
几乎没有必要,也许写一个返回空字符串的其他条件?这可能会更好地说明递归。@TimStraubinger是的,你是对的,这更干净。“已编辑”。@KeithBryant当然,写这篇文章的最干净的方法不涉及递归。你想这样看,还是你在寻找使用递归的最干净的方法?@KeithBryant使用递归这是它将得到的最干净的方法。您自己已经非常接近最佳答案,只是缺少了一个使递归调用能够工作的部分。@KeithBryant还没有人直截了当地说出来,但是编写这个的更简洁的方法是通过循环计算迭代次数。当然,这并不涉及递归,但我想每个人都会同意它更干净。这是正确的,但我不知道你为什么要这样写——它只是让它更难阅读。
public static String stringTimes(String theString, int times) {
    return times > 0 ? theString + stringTimes(theString, times - 1) : "";
}