提问者:小点点

如何打破递归


在下面的代码中,我能够得到所需的答案,我正在删除比它的前一个索引和下一个索引更小的数字。 然而,除了答案之外,我还遇到了线程“main”java.lang.IndexOutOfBoundsException:index:4,size:4中的错误异常,需要帮助确定如何在这里中断递归。 提前谢谢你。

public class numberProblem{

public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<>();
    list.add(10);
    list.add(3);
    list.add(20);
    list.add(5);
    list.add(30);
    list.add(20);
    list.add(60);
    
    int len = list.size();
    System.out.println(list);
    testList(list, len);
}
    
public static void testList(ArrayList<Integer> list, int len) { 
    
    
    System.out.println("Len is:"+len);
    System.out.println(list.size());
    ArrayList<Integer> l = list;
    len= l.size();
    
    for(int i= 1;i<=len-1;i++) {
        
        if(l.get(i)<l.get(i-1) && l.get(i)<l.get(i+1)) {
            l.remove(i);
            testList(l, l.size());  
        }
        
    }
    
    System.out.println(list);   
    
}

}


共1个答案

匿名用户

这种没有递归的解决方案也可以用来实现您试图实现的目标:

public static void testList(ArrayList<Integer> list, int len) { 
        
        
        System.out.println("Len is:"+len);
        System.out.println(list.size());
        ArrayList<Integer> l = list;
        len= l.size();
        
        for(int i= 1;i<len-1;i++) {
            
            if(l.get(i)<l.get(i-1) && l.get(i)<l.get(i+1)) {
                l.remove(i);
                i--;
                len--;
            }
            
        }
        
        System.out.println(list);   
        
    }