2013-04-12 23 views
0
package abcde; 

public class Abcde{ 

    public static void main(String[] args){ 
     System.out.println(recursion(97)); 
    } 

    public static int recursion (int n) { 
     for (int i = n; i< 123; i++) 
     { 
      String achar = new Character((char)i).toString(); 
      System.out.print(achar); 

     } 
     return -1; 
    } 
} 

所需的輸出必須被ABCDEFGHIJKLMNOPQRSTUVWXYZ的端部,而輸出是ABCDEFGHIJKLMNOPQRSTUVWXYZ-1在遞歸中使用方法時輸出不正確。在方法返回語句在輸出

我不想-1在端部返回一個整數。 當我將輸入類型更改爲void時,該方法不起作用。

我們可以做些什麼呢?

+3

被稱爲「遞歸」的方法通常被認爲是遞歸的:) – dasblinkenlight

+2

有沒有人注意到這裏有任何遞歸? –

+1

這不使用遞歸。它是一個名爲recursion()的方法中的for循環。 – drunkenRabbit

回答

2

它重寫到:

public static void main(String[] args){ 
    noRecursion(97); 
} 

public static void noRecursion (int n) { 
      //^^^^ 
    for (int i = n; i< 123; i++) { 
     System.out.print((char)i); 
    } 
} 
4

最終-1獲取打印的recursion方法外:main()打印什麼recursion回報,這恰好是-1

如果將返回類型recursion更改爲void,則需要將其作爲方法調用,而不是表達式。換句話說,您不能再撥打println(recursion(97)),因爲println需要打印一個值。

作爲一個方面說明,爲了遞歸,一個方法需要有一個直接或間接調用相同方法的代碼路徑。由於您的recursion方法中缺少「自己調用」功能,請考慮將其重命名爲iteration

2

其實,你recursion函數不返回任何-1,但它可以打印它返回的所有其他字符之前。如果您將其更改爲

public static void notRecursion (int n) { 
    for (int i = n; i< 123; i++) 
    { 
     String achar = new Character((char)i).toString(); 
     System.out.print(achar); 

    } 
} 

,然後只是把它從你的主像

notRecursion(97); 

它會打印你想要它打印


或者

什麼

public static String recursion (int n) 
{ 
    if(n >97 +1) 
    { 
     System.out.print(recursion(n-1)); 
    } 

    String achar = new Character((char)n).toString(); 
    return(achar) 
} 

,然後把它與

System.out.println(recursion(123)); 
+0

嗨,感謝上面的代碼使用遞歸,但輸出得到是從z到a而不是從z到。我也看到{在輸出的開始。幫幫我 ! – user2275925

+0

@ user2275925我有一個問題在邊緣情況下,對此。另外,如果您想要反向打印,則必須將其向後打印。我編輯了我的帖子 –

1

選擇純函數了副作用:

public static String iteration (int n) { 
    final StringBuilder b = new StringBuilder(); 
    for (char c = (char)n; c < 123; c++) 
     b.append(c); 

    return b.toString(); 
} 

現在你可以調用這個方法,你現在調用它,並打印其結果。