如何使用Java递归打印(但不返回)String?

时间:2016-03-01 07:25:55

标签: java recursion

我讨厌滥用SO做作业,但我是个腌菜。基本上,我的导师要我这样做:

编写递归方法以向后打印String。

  • 方法标题是:public void printBackwards1(String s)
  • print语句必须在递归调用之前。
  • 该方法不应改变或反转String,只能向后打印。

之后,他们希望我做同样的事情,但在电话会议后有了print语句。

我很难过。我已经掀起了一个普通人的递归方法:

public static String reverseString(String input) {
        if(input.equals("")) {
            return input;
        }
        else {
            return(reverseString(input.substring(1)) + input.substring(0, 1));
        }
}

但印刷品让我挠头。提前谢谢!

3 个答案:

答案 0 :(得分:7)

只需打印当前连接到字符串的任何内容:

public static void reverseString(String input) {
    if(input.equals("")) {
        return;
    }
    else {
        reverseString(input.substring(1));
        System.out.print(input.charAt(0));
    }
}

或更短:

public static void reverseString(String input) {
    if(input.length() > 0) {
        reverseString(input.substring(1));
        System.out.print(input.charAt(0));
    }
}

答案 1 :(得分:0)

回答其他选择。尽管您需要记住在进行递归调用之前打印,但您必须基本相同。因此,您需要在执行递归调用之前打印最后一个字母,而不是来自@Eran的其他解决方案,您可以在其中打印第一个字母。

private static void printBackwards2(String input) {
    if (input.equals("")) {
        return;
    } else {
        // Print the last char
        System.out.print(input.substring(input.length()-1, input.length()));
        // Recursive call without the last char by using substring
        printBackwards2(input.substring(0,input.length()-1));
    }
}

答案 2 :(得分:0)

如果我理解你应该使用递归调用打印“反向”字符串,如果是这样,请使用第一个问题:

public static void reverseString ( String input ) {
    if ( input != null ) {
        if ( input.length () <= 1 ) {
            System.out.print ( input );
        }else{
           System.out.print ( input.charAt ( input.length ()-1 ));
           reverseString ( input.substring ( 0, input.length ()-1) );
        }
    }
}

和第二个问题

 public static void reverseString ( String input ) {
    if ( input != null ) {
        if ( input.length () <= 1 ) {
            System.out.print ( input );
        }else{
           reverseString ( input.substring ( 1, input.length ()) );
           System.out.print ( input.charAt ( 0 ));
        }
    }
}