Java 递归方法

Java 递归方法,java,recursion,Java,Recursion,我想回顾调用递归方法的最后一部分,一组整数,结果如下: {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

我想回顾调用递归方法的最后一部分,一组整数,结果如下: {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;
}
publicstaticvoidmain(字符串[]args){
HashMap myMap=新HashMap();
put(1,新HashSet(){{add(10);}});
myMap.put(2,新HashSet(){{add(20);}}});myMap.get(2.add(30);
put(3,新HashSet());
HashSet setInteg=新的HashSet();
recursivFonc(setInteg,myMap,1);
系统输出打印项次(SETINTGI);
}
静态HashSet recursivFonc(HashSet setInteg、HashMap map、int cont)
{
系统输出打印项次(续);
if(map.get(cont)!=null)
{
Set=map.get(cont);
for(整数整数整数:集)
{
setInteg.add(intg);
返回recursivFonc(setInteg,map,cont);
}
}
返回setInteg;
}

我是如何用{10,20,30}结束一个集合的?

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

您可能还希望在每次递归调用时递增
cont
。因为递归调用的退出点取决于
map.get(cont)
是否为null。如果您从未更改
cont
的值,则最初为
1
。对该方法的每次调用都将被传递
1
,并且它将持续很长时间(我想,直到内存耗尽为止)

静态HashSet recursivFonc(HashSet setInteg、HashMap map、int cont)
{
系统输出打印项次(续);
if(map.get(cont)!=null)
{
Set=map.get(cont);
for(整数整数整数:集)
{
setInteg.add(intg);
}
返回recursivFonc(setInteg,map,cont+1);
}
返回setInteg;
}

for循环中有一个
return
语句。因此,for循环只迭代一次。相反,将return语句移到for循环之外。因此,;循环将遍历集合的所有元素

您可能还希望在每次递归调用时递增
cont
。因为递归调用的退出点取决于
map.get(cont)
是否为null。如果您从未更改
cont
的值,则最初为
1
。对该方法的每次调用都将被传递
1
,并且它将持续很长时间(我想,直到内存耗尽为止)

静态HashSet recursivFonc(HashSet setInteg、HashMap map、int cont)
{
系统输出打印项次(续);
if(map.get(cont)!=null)
{
Set=map.get(cont);
for(整数整数整数:集)
{
setInteg.add(intg);
}
返回recursivFonc(setInteg,map,cont+1);
}
返回setInteg;
}

实际上,由于
堆栈溢出错误,它将很快崩溃!但为什么结果是[10,20],而不是[10,20,30]<代码>返回递归函数(setInteg,map,cont+1)
@user1149157-结果应该是预期的
[20,10,30]
?您是否尝试过递增
cont
并将return语句移出循环。当我执行此程序时,设置的结果是[10,20],通常是[10,20,30]。实际上,由于
堆栈溢出错误
,它将很快崩溃。是的,corse!但为什么结果是[10,20],而不是[10,20,30]<代码>返回递归函数(setInteg,map,cont+1)@user1149157-结果应该是预期的
[20,10,30]
?您是否尝试过递增
cont
并将return语句移出循环。当我执行此程序时,设置结果为[10,20],通常为[10,20,30]
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;
    }