例如,如果我调用exchangePairs(“abcdefg”),我应该收到“badcfeg”作为回报。
这是一个家庭作业,任何类型的伪代码都会非常有用。我刚刚开始学习递归,直到这个问题,我没有太多的问题。
答案 0 :(得分:6)
public String swapPairs(String s) {
if (s.length() < 2)
return s;
else
return swap(s.charAt(0), s.charAt(1)) + swapPairs(s.substring(2));
}
答案 1 :(得分:1)
你不仅仅是开始学习递归,因为递归是你日常生活的一部分。你只是没注意到,因为它是如此正常,没有人称之为递归。
例如,您在电视上观看电影,在一个场景中有人在电视上观看电影。
在编程中,递归是一种简单易行的方法。总是从简单的案例开始:
现在,事实证明我们已经涵盖了所有案例!问题解决了! 这就是递归的伟大之处。你只是使用你的功能就好像它已经完成,尽管你还没有完成它。
答案 2 :(得分:0)
为什么要使用递归?
for (int i = 0; i + 1 < strlen(str); ++i) {
char tmp = str[i + 1];
str[i + 1] = str[i];
str[i] = tmp;
}
如果你必须使用递归,我想你可以这样做:
char* exchangePairs(char* str) {
if (strlen(str) >= 2) {
// if there are characters left, swap the first two, then recurse
char tmp = str[1];
str[1] = str[0];
str[0] = str[1];
exchangePairs(str + 2);
}
return str;
}
那是在C中,但它应该给你一个想法(我在C中更好,并且不想只给你一个复制/可粘贴的解决方案)。
答案 3 :(得分:0)
使用尾递归
String reverse(String input)
{
if(String.length()==1)
{
return input;
}
else
{
return reverse(input,"");
}
}
String reverse(String input, String result)
{
if(input.length == 0) return result;
else return result(input.substring(1),input.charAt(0) + result);
}
答案 4 :(得分:0)
好这是我的解决方案。我没有Java可供使用,所以我在C#中使用它非常类似于Java,所以应该很容易理解/端口;
public static char[] exchangePairs(char[] charArray, int current)
{
if(current >= charArray.Length - 1)
{
return charArray;
}
char nextChar = charArray[current + 1];
char currentChar = charArray[current];
charArray[current] = nextChar;
charArray[current + 1] = currentChar;
int i = current + 2;
return exchangePairs(charArray, i);
}
调用方法:
exchangePairs(“abcdefghij”.ToCharArray(),0);
答案 5 :(得分:0)
public static String swapPairs(String s) {
String even = "";
String odd = "";
int length = s.length();
for (int i = 0; i <= length-2; i+=2) {
even += s.charAt(i+1) + "" + s.charAt(i);
}
if (length % 2 != 0) {
odd = even + s.charAt(length-1);
return odd;
} else {
return even;
}
}
答案 6 :(得分:0)
对Steven解决方案的一个小补充,您可以使用StringBuffer / StringBuilder.reverse()来反转字符串。
public String swapPairs(String s) {
if (s.length() < 2)
return s;
else {
return new StringBuffer(s.substring(0, 2)).reverse().toString() + swapPairs(s.substring(2));
}
}
答案 7 :(得分:-2)
我将引入一个整数递归控制变量,它是已经交换了多少字符串。在每个级别,检查控制变量以查看是否还有其他操作,如果有,则交换下一对,递增2并递归。