2012-02-08 126 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