递归,字镜像本身

时间:2014-04-15 01:45:07

标签: java recursion

我正在尝试编写一个递归,其中一个单词正在尝试镜像本身(appleelppa)。我的思维过程是通过递归以相反的顺序打印出单词,然后在开头添加单词。但是,这不起作用。这是我的代码,

public static String reverse(String str) {
if ((null == str) || (str.length()  <= 1)) {
    return str;
}
return str + reverse(str.substring(1)) + str.charAt(0);
}

这是输出:ellepplepppleaapple

任何帮助?

由于

4 个答案:

答案 0 :(得分:2)

您的reverse例程几乎是正确的(但您确实应该添加mirror例程,您的方法会被混淆)。你想要这样的东西,

// Reverse the input String str.
private static String reverse(String str) {
  // This just looked ugly.
  if (str == null || str.length() <= 1) {
    return str;
  }
  // this is how you recursively reverse the word.
  return reverse(str.substring(1)) + str.charAt(0);
}

// mirror is trivial, the word and the reverse of the word.
public static String mirror(String str) {
  return str + reverse(str);
}

public static void main(String[] args) {
  String str = "apple";
  System.out.println(mirror(str));
}

输出(按要求)

appleelppa

修改

// mirror an input string iteratively.
public static String mirror(String str) {
  // return str + reverse(str);
  StringBuilder sb = new StringBuilder(str);
  return str + sb.reverse().toString();
}

答案 1 :(得分:0)

如果您只是编写一个递归函数来反转字符串,然后将其添加到原始函数中,那将会简单得多。

public class Reverse{
    public static String reverse(String str) {
        if ((null == str) || (str.length()  <= 1)) {
            return str;
        }
        return reverse(str.substring(1)) + str.charAt(0);
    }
    public static void main(String[] args) {
        System.out.println("appleelppa" + reverse("appleelppa"));
    }
}

丑陋的黑客使用递归而非迭代的方法。 请注意,不是首选的做事方式。它只是放在这里向OP展示它可以做到,因为他很好奇。这是受到AdrianShum评论的启发。

public class Reverse{
    public static String mirror(String str, boolean firstCall) {
        if ((null == str) || (str.length()  <= 1)) {
            return str;
        }
        if (firstCall)
            return str + mirror(str.substring(1), false) + str.charAt(0);
        else
            return mirror(str.substring(1),false) + str.charAt(0);
    }
    public static void main(String[] args) {
        System.out.println(mirror("appleelppa", true));
    }
}

答案 2 :(得分:0)

您给出的所有答案都为您提供了新的解决方案。我在这里告诉你,你的解决方案是正确的。

中删除str +
return str + reverse(str.substring(1)) + str.charAt(0);

制作:

return reverse(str.substring(1)) + str.charAt(0);

你原来的功能就像一个魅力;)

答案 3 :(得分:0)

另一种不丑陋的递归方法:

public static String mirror(String s) {
    if (s == null || s.isEmpty()) {
        return "";
    }
    return s.charAt(0) + mirror(s.substring(1)) + s.charAt(0);
}

简而言之,镜像字符串意味着拥有一个包含第一个字符的字符串,然后是镜像的剩余字符串,然后是第一个字符。

(编辑:刚刚使用我测试过的实际代码进行了更新)