繁体   English   中英

递归方法检查整数行是否降序:返回true / false

[英]Recursive method checking whether a row of integers is descending: return true/false

我必须在Java中编写一个递归方法,如果行降序返回true,否则返回false。

这是我尝试过的方法,但无法正常工作:

ArrayList<Integer> getallen = new ArrayList();
        getallen.add(500);
        getallen.add(400);
        getallen.add(300);
        getallen.add(200);
        getallen.add(100);
        getallen.add(0);

        System.out.println(isDescending(getallen));
    }

public static boolean isDescending(ArrayList<Integer> getallen) {
    if (getallen.size() >= 2) {
        if (getallen.get(0) < getallen.get(1)) {
            return false;
        } else if (getallen.size() > 0) {
            getallen.remove(0);
            return isDescending(getallen);
        } else {
            return true;
        }
    } else {
        return false;
    }
}

我认为您有不必要的情况,如果大小小于2,则只能假设是正确的。

尝试:

public static boolean isDescending(ArrayList<Integer> getallen) {
    if (getallen.size() >= 2) {
        if (getallen.get(0) < getallen.get(1)) {
            return false;
        } else {
            getallen.remove(0);
            return isDescending(getallen);
        }
    } else {
        return true;
    }
}

如果我必须给它打分,它将得到一个很大的X

  • 被骗到关于stackoverflow的问题
  • 效率很低(尝试对一百万个元素的列表进行此测试,然后意识到删除ArrayList元素0会导致所有元素向下移动)

而是考虑:

public static boolean isDescending(List<Integer> getallen) {
    return isDescending(getallen, 0);
}

public static boolean isDescending(List<Integer> getallen, int from) {
    return from >= getallen.size() - 1
            || getallen.get(from) < getallen.get(from + 1)
            && isDescending(getallen, from + 1);
}

对数递归深度更有效的方法怎么样? 只是练习。

public static void main(String[] args) {
    List<Integer> getallen = new ArrayList<Integer>();        
    getallen.add(500);
    getallen.add(400);
    getallen.add(300);
    getallen.add(200);
    getallen.add(100);
    getallen.add(0);

    System.out.println(isDescending(getallen));
}

public static boolean isDescending(List<Integer> getallen) {
    return isDescending(getallen, 0, getallen.size());
}

private static boolean isDescending(List<Integer> getallen, 
        int start, int end) {
    if (end - start <= 1)
        return true;
    if (end - start == 2) {
        return getallen.get(start) > getallen.get(start + 1);
    }
    int middle = (start + end - 1) / 2 + 1;
    return (getallen.get(middle - 1) > getallen.get(middle)) && 
            isDescending(getallen, start, middle) && 
            isDescending(getallen, middle, end);
}

暂无
暂无

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

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