繁体   English   中英

递归方法

[英]recursive method

我想在调用递归方法的定论上学一下,它是一组整数,结果为:{10,20,30},但是在这个程序中我有麻烦,

  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}的集合?

您在for循环中有一个return语句。 因此,for循环仅迭代一次。 而是将return语句移到for循环之外。 因此; 循环将遍历集合中的所有元素。

您可能还希望在每次递归调用时增加cont 因为递归调用的退出点取决于map.get(cont)是否为null。 如果您从不更改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;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM