Java 迭代解上的递归
我对递归相当陌生,在学校学习递归的同时尝试新事物。我已经提交了关于使用递归进行字符串反转的作业。有人告诉我,我提交了一个迭代解决方案,而不是递归。我想我做对了。想法Java 迭代解上的递归,java,recursion,Java,Recursion,我对递归相当陌生,在学校学习递归的同时尝试新事物。我已经提交了关于使用递归进行字符串反转的作业。有人告诉我,我提交了一个迭代解决方案,而不是递归。我想我做对了。想法 public static String reverse(String s) { int i=0,j=s.length(); char[] chars= s.toCharArray(); while(i<j-1 && i!=j-1) {
public static String reverse(String s)
{
int i=0,j=s.length();
char[] chars= s.toCharArray();
while(i<j-1 && i!=j-1)
{
char c=chars[i];
chars[i]=chars[j-1];
chars[j-1]=c;
i++;j--;
reverse(new String(chars).substring(i,j));
}
return new String(chars);
}
公共静态字符串反转(字符串s)
{
int i=0,j=s.length();
char[]chars=s.toCharArray();
while(i如果需要递归算法,请尝试
public static String reverse(String s) {
if (s == null || s.length() <= 1) {
return s;
}
StringBuilder sb = new StringBuilder(s.substring(
s.length() - 1, s.length()));
sb.append(reverse(s.substring(0, s.length() - 1)));
return sb.toString();
}
公共静态字符串反转(字符串s){
如果(s==null | | s.length()您没有使用递归调用的结果,因此它不是纯递归解决方案。纯递归解决方案可以是:
public String reverse(String s)
{
if (s.length() == 0)
return s;
return reverse(s.substring(1)) + s.charAt(0);
}
粗略地说,递归和迭代执行
相同类型的任务:!一次一件地解决一项复杂的任务,以及
把结果结合起来
迭代的重点:!不断重复,直到任务“完成”
e、 例如,循环计数器达到极限,链表达到空指针,instream.eof()变为true
递归的重点:!通过将大问题分解为小问题来解决它
和更小的部分,直到你能解决它;合并结果
请参阅代码示例以更好地理解:
//---------------迭代版本------------------
static int FibonacciIterative(int n)
{
if (n == 0) return 0;
if (n == 1) return 1;
int prevPrev = 0;
int prev = 1;
int result = 0;
for (int i = 2; i <= n; i++)
{
result = prev + prevPrev;
prevPrev = prev;
prev = result;
}
return result;
}
应该是:
public static String reverse(String s)
{
if (s.length() == 1)
return "";
else
return reverse( s from position 1 to end) + s[0]);
}
将您的java语法用于处理子字符串…(有一段时间没有触及它了)
这就是递归。我编写了这个使用递归的简单代码
public static String reverse(String s){
return reverse(s.toCharArray(),0,s.length()-1);
}
private static String reverse(char [] chars, int low, int high){
if(low>=high) return new String(chars);
char temp = chars[low];
chars[low]=chars[high];
chars[high]=temp;
return reverse(chars,low+1,high-1);
}
否则,您也可以将其用作第一个方法s.toCharArray()的参数,这样就不必使用返回值;)完全递归解决方案不需要while-loop。您正在调用自己的方法,但不使用该方法的结果。因此,您有一个迭代解决方案,其中包含一个过时的方法调用。@ShoaibChikate没有reverse()String
类中的
。也许你的意思是StringBuilder
?是的……谢谢你打开我的眼睛。错误的评论
public static String reverse(String s){
return reverse(s.toCharArray(),0,s.length()-1);
}
private static String reverse(char [] chars, int low, int high){
if(low>=high) return new String(chars);
char temp = chars[low];
chars[low]=chars[high];
chars[high]=temp;
return reverse(chars,low+1,high-1);
}