Java Recursion:为什么我的递归方法不会回调自身?

时间:2014-03-07 21:36:08

标签: java recursion

我是编程新手,无法解决这个问题。我试过改变静态,以不同的方式调用方法,但仍然无法让它回调自身。程序的要点是让用户输入一个字符串,然后输出字符串的反向。

public class StringReverse
{
    public static String reverse(String s)
    {
        int i = s.length()-1;
        String letter = "";

        if(i == 0)
        {
            return""; //Base Case for the recusive method.
        }
        else
        {
            return letter = s.substring(s.length() - 1) + reverse(s.substring(s.length() - 1));
        }
    }

    public static void main(String[] args)
    {
        String input = "";
        Scanner in = new Scanner(System.in);

        do{
            System.out.println("\nEnter q to quit.");
            System.out.println("Enter a word...(No UpperCase letters)");
            input = in.nextLine();
            String reversedWord = reverse(input);
            System.out.print(reversedWord); 
        }while(!input.equals("q"));
    }   
}

7 个答案:

答案 0 :(得分:1)

我想你想这样做:

return letter = s.substring(s.length() - 1) + reverse(s.substring(0, s.length() - 1));

更新:

哦,还有:

int i = s.length();

答案 1 :(得分:1)

这是你的反转功能:

public static String reverse(String s)
{
    if(s.length() <= 1)
    {
        return s;
    }
    else
    {
        return s.substring(s.length()-1) + reverse(s.substring(0,s.length()-1));
    }
}

确保也检查null。

答案 2 :(得分:0)

致电时

s.substring(s.length() - 1)

你只用最后一个字符来调用它。效果不能是字符串反转。

答案 3 :(得分:0)

import java.util.Scanner;

public class JavaApplication3 {

public static String reverse(String s)
{
    int i = s.length()-1;
    String letter = "";

    if(i == -1)
    {
        return""; 
    }
    else
    {
        return letter = s.substring(s.length() - 1) + reverse(s.substring(0, s.length() - 1));
    }
}

public static void main(String[] args)
{
    String input = "";
    Scanner in = new Scanner(System.in);

    do{
        System.out.println("\nEnter q to quit.");
        System.out.println("Enter a word...(No UpperCase letters)");
        input = in.nextLine();
        String reversedWord = reverse(input);
        System.out.print(reversedWord); 
    }while(!input.equals("q"));
}   
}

这就是答案。这就是你做错了:

首先,你只返回了最后一个角色。 s.substring(int x)从位置x的字符到字符串的结尾。其次,因为你每次都做-1,你的基本情况应该是-1

答案 4 :(得分:0)

问题出在以下几行:

return letter = s.substring(s.length() - 1) + reverse(s.substring(s.length() - 1));

看来你正在返回最后一个字母以及在最后一个字母上调用reverse的值。我认为你真的想做一些像

这样的事情
return letter = s.substring(s.length() - 1) + reverse(s.substring(0, s.length() - 1));

如果使用字符串“ABC”调用它,则第一次迭代会给出类似的内容:

"C" + reverse("AB")

答案 5 :(得分:0)

无需创建不必要的变量。简单明了。

public static String reverse(String s) {
    if (s == null || s.length() < 1)
        return "";
    return s.substring(s.length() - 1) + reverse(s.substring(0, s.length() - 1));
}

答案 6 :(得分:0)

递归正在运行,但是您输入了错误的输入。这就是您想要的:

    public static String reverse(String s)
    {
        int i = s.length()-1;

        if(i == -1)
            return "";
        return s.substring(i) + reverse(s.substring(0, i));
    }

你的工作原因有两个原因。一,通过测试i == 0而不是i == -1作为基本情况,你总是会切断后向字符串的最后一个字母。二,当你调用递归方法时,你只传入字符串的最后一个字符而不是除了字符串的最后一个字符。