2012-02-08 229 views
0

我想在呼叫遞歸方法,有結果了一套整數的finaly中檢索: {10,20,30}但是在這個節目,我有porblem,遞歸方法

public static void main(String[] args) { 
    HashMap<Integer, Set<Integer>> myMap = new HashMap(); 
    myMap.put(1, new HashSet(){{add(10);}}); 
    myMap.put(2, new HashSet(){{add(20);}});myMap.get(2).add(30); 
    myMap.put(3, new HashSet()); 

    HashSet<Integer> setInteg = new HashSet(); 
    recursivFonc(setInteg, myMap, 1); 
    System.out.println(setInteg); 
} 

static HashSet recursivFonc(HashSet<Integer> setInteg, HashMap<Integer, Set<Integer>> map, int cont) 
{ 
    System.out.println(cont); 
    if(map.get(cont) != null) 
    { 
     Set<Integer> set = map.get(cont); 
     for(Integer intg : set) 
     { 

      setInteg.add(intg); 
      return recursivFonc(setInteg, map, cont); 
     } 
    } 
    return setInteg; 
} 

如何做我做到{10,20,30}最後一組?

回答

4

您在for循環中有一個return語句。因此,for循環僅迭代一次。相反,將return語句移到for循環之外。因此;該循環將迭代該集合的所有元素。

您可能還想在每次遞歸調用時增加cont。因爲遞歸調用的出口點取決於map.get(cont)是否爲空。如果您從未更改cont的值,則最初爲1。每次調用方法將會通過1,並且它會持續很長時間(直到你內存不足,我猜)。

static HashSet recursivFonc(HashSet<Integer> setInteg, HashMap<Integer, Set<Integer>> map, int cont) 
    { 
     System.out.println(cont); 
     if(map.get(cont) != null) 
     { 
      Set<Integer> set = map.get(cont); 
      for(Integer intg : set) 
      { 

       setInteg.add(intg); 
      } 
      return recursivFonc(setInteg, map, cont + 1); 
     } 
     return setInteg; 
    } 
+1

實際上,由於StackOverflowError,它會非常快地崩潰。 – Viruzzo 2012-02-08 11:44:34

+0

科斯的零錢!但爲什麼結果是[10,20]而不是[10,20,30]? 'return recursivFonc(setInteg,map,cont + 1);' – Mehdi 2012-02-08 12:00:22

+1

@ user1149157 - 預期的結果應該是「[20,10,30]」?你是否嘗試過增加'cont' **和**在循環外移動return語句。 – 2012-02-08 12:02:24