迭代解决方案的递归

时间:2013-11-18 08:14:21

标签: 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)
        {
            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);
    }

5 个答案:

答案 0 :(得分:2)

您没有使用递归调用的结果,因此它不是纯粹的递归解决方案。一个纯粹的递归解决方案可以是:

public String reverse(String s)
{
if (s.length() == 0) 
     return s;

return reverse(s.substring(1)) + s.charAt(0);
}

答案 1 :(得分:2)

我写了这个使用递归的简单代码

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()的参数,这样你就不必使用返回值;)

答案 2 :(得分:0)

如果您想要递归算法,请尝试

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

答案 3 :(得分:0)

应该是:

public static String reverse(String s)
{
    if (s.length() == 1)
        return  "";
    else 
       return reverse( s from position 1 to end) + s[0]);
}

将你的java语法用于处理子字符串...(暂时没有触及它)

这是递归。

答案 4 :(得分:-1)

粗略地说,递归和迭代执行 同样的任务:!一次解决一个复杂的任务,并且 结合结果。

强调迭代 :!不断重复,直到任务“完成” 例如,循环计数器达到限制,链表达到空指针,instream.eof()变为真

强调递归:!通过将其分解为更小的问题来解决大问题 和小块,直到你可以解决它;结合结果。

请参阅代码示例以便更好地理解:

// ---------------迭代版---------------------

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

// ---------------天真的递归版本---------------------

static int FibonacciRecursive(int n)
{
    if (n == 0) return 0;
    if (n == 1) return 1;

    return FibonacciRecursive(n - 1) + FibonacciRecursive(n - 2);
}
相关问题