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);
}