我正在尝试编写一个递归,其中一个单词正在尝试镜像本身(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
任何帮助?
由于
答案 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);
}
简而言之,镜像字符串意味着拥有一个包含第一个字符的字符串,然后是镜像的剩余字符串,然后是第一个字符。
(编辑:刚刚使用我测试过的实际代码进行了更新)