簡體   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