2016-02-12 42 views
0

我剛剛開始學習遞歸,並能夠使用它編寫一個簡單的階乘程序,沒有太多問題。現在我正在嘗試編寫一個遞歸方法,以相反的順序寫入數組,但我無法弄清楚我做錯了什麼。我錯過了什麼?謝謝。在java中使用遞歸反轉一個數組

import java.io.*; 

public class Recursion { 
    public static void main(String[] args) throws IOException{ 
    int myArray[] = {1,2,3,4,5,6,7,8,9,10}; 
    } 

    public static void reverseDisplay(int[] ary, int position){ 
    if(position > 0) 
     System.out.print(ary[position]); 
    reverseDisplay(ary, position - 1); 
    } 
} 
+0

請詳細說明發生了什麼問題,最好用一些例子。 –

+0

也許'System.out.print(ary [position-1]);'?結束條件'if(position> 0)'似乎表明這一點。 – WhatsUp

+0

當我運行代碼時,我根本沒有輸出。 – catdog

回答

4
  • 你不打電話給你的遞歸方法。

  • 由於reverseDisplay()始終由於缺少括號而被執行,因此您有無窮的遞歸。

  • 還您停止條件必須是>= 0因爲數組的第一個指數是0

你的方法應該是:

import java.io.IOException; 

public class Recursion { 
    public static void main(String[] args) throws IOException{ 
     int myArray[] = {1,2,3,4,5,6,7,8,9,10}; 

     reverseDisplay(myArray, myArray.length -1); 
    } 

    public static void reverseDisplay(int[] ary, int position){ 
     if(position >= 0) { 
      System.out.print(ary[position]); 
      reverseDisplay(ary, position - 1); 
     } 
    } 
} 
+0

非常感謝。我明白我現在做錯了什麼。 – catdog

0

在做遞歸你需要的東西叫做基本情況。你需要基本情況​​來結束遞歸,否則你會得到堆棧溢出。

你可能會嘗試這樣的事情。 return語句阻止遞歸從無止境。

public static void reverseDisplay(int[] ary, int position){ 
    if(int == -1) 
     return; 
    System.out.print(ary[position]); 
    reverseDisplay(ary, position - 1); 
    } 
0

嘗試:

import java.io.*; 

public class Recursion { 
    public static void main(String[] args) throws IOException{ 
    int myArray[] = {1,2,3,4,5,6,7,8,9,10}; 

    reverseDisplay(myArray,0); 
    } 

    public static void reverseDisplay(int[] ary, int position){ 
    if(position == ary.length){ 
     return; 
    } 

    reverseDisplay(ary, position + 1); 
    System.out.print(ary[position]); 
    } 
} 

如果position == ary.length完成遞歸,否則你打電話reverseDisplay遞歸和後打印的ary的當前位置。