2017-03-15 49 views
0

我正在做一個非常基本的任務。 「使用遞歸來打印列表的值」,我想出了下面的代碼,但是當它每次通過列表時都會調用它自己,我想知道是否有更好的方法。有什麼建議嗎?java打印使用遞歸的項目列表似乎效率低下

public class RecurList { 

public static void main(String[] args) { 
    int[] list = {8,7,9,10,56}; 

    int ix = list.length; 
    int sumNow = ShowNext(ix, 0, list); // initial call -> sum is 0 

    System.out.println("Recursion total is " + sumNow); 
} 
    public static int ShowNext(int inx, int sum, int[] lst) { 
     if (inx == 0) return sum; 
     int item = lst[inx - 1]; 
     sum += item; 
     System.out.println("inx:" + inx + " item:" + item + " sum:" + sum); 
     return ShowNext(inx - 1, sum, lst); 
    } 

}

+0

http://codereview.stackexchange.com/ – Reimeus

+0

是;只傳遞列表的其餘部分。查找列表上的基本遞歸。 – Prune

回答

1

請仔細閱讀並遵守Java Naming Conventions。用小寫字母開始您的方法名稱。

「使用遞歸打印列表的值」

你,因爲你使用的是陣列而不是一個列表失敗那項任務。

它通過列表每次它調用自己我想知道是否有更好的方法。

這個問題有兩種解決方法。

@Prune建議的更有意義的方法是:用一個元素縮小列表(在您的情況下是一個數組)。實用程序類Arrays有辦法做到這一點。

較小「遞歸」的風格是使陣列的類成員,並從方法參數列表中刪除:

public class RecurList { 
    static int[] list; 
public static void main(String[] args) { 
    list = {8,7,9,10,56}; 

    int ix = list.length; 
    int sumNow = ShowNext(ix, 0); // initial call -> sum is 0 

    System.out.println("Recursion total is " + sumNow); 
    } 
    public static int ShowNext(int inx, int sum) { 
     if (inx == 0) return sum; 
     int item = lst[inx - 1]; 
     sum += item; 
     System.out.println("inx:" + inx + " item:" + item + " sum:" + sum); 
     return ShowNext(inx - 1, sum); 
    } 
}