2016-03-01 44 views
1

我不想濫用SO做家庭作業,但我在泡菜。基本上,我的老師希望我這樣做:如何使用Java遞歸地打印(但不返回)字符串?

編寫一個遞歸方法向後打印字符串。

  • 方法頭是:公共無效printBackwards1(String s)將
  • print語句必須在遞歸調用之前。
  • 該方法不應該改變或反轉字符串,只向後打印。

之後,他們希望我做同樣的事情,但打電話後有打印聲明。

我很難過。我已經掀起了一個正常人的遞歸方法:

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

但打印的東西讓我撓我的頭。提前致謝!

+0

使用System.out.println(「你的文字」+ var); – amkz

回答

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