Выход из рекурсии в Java - PullRequest
22 голосов
/ 13 мая 2009

Рекурсия является своего рода стилем «разделяй и властвуй», она разделяется при уменьшении (древовидная структура данных), и я хочу, чтобы она полностью разорвалась при обнаружении нарушения, что означает разрыв всех рекурсивных путей и возврат правда. Возможно ли это?

Ответы [ 11 ]

0 голосов
/ 13 мая 2009

Если рекурсивные вызовы не обрабатываются параллельно, вам, вероятно, просто нужно добавить логику, чтобы проверить значение первого рекурсивного вызова перед выполнением второго (и последующих, если не двоичная древовидная структура) рекурсивного вызова.

public abstract class Tree {

    protected abstract boolean headIsViolation();

    protected abstract boolean isLeaf();

    public Tree getLeft();

    public Tree getRight();

    // Recursive
    public boolean checkViolation() {
        if(this.isLeaf()) {
            return this.headIsViolation();
        }

        // If needed, you could pass some sort of 'calculation state'
        // object through the recursive calls and evaluate the violation
        // through that object if the current node is insufficient
        if(this.headIsViolation()) {
            // Terminate the recursion
            return true;
        }

        // Fortunately, Java short-circuits ||
        // So if the left child is in violation, the right child will
        // not even be checked
        return this.getLeft().checkViolation() || this.getRight().checkViolation();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...