Есть ли способ завершить рекурсивный метод, когда определенное условие выполняется в Java? - PullRequest
4 голосов
/ 06 мая 2011

Есть ли способ внезапно вернуться к методу, который вызывает метод ниже, когда условие выполнено?Нечто похожее на разрыв для циклов.

public void createTree(TreeNode tree) throws IOException {
    if (i >= preorder.length) {
        // Leave recursive method
    } else if (preorder[i] == '0') {
        tree.value = '0';
        tree.left = tree.right = null;
        i++;                
    } else {
        tree.value = preorder[i];
        i++;
        tree.left = new TreeNode();
        createTree(tree.left);
        tree.right = new TreeNode();
        createTree(tree.right);
    }
}

Спасибо.

Ответы [ 4 ]

7 голосов
/ 06 мая 2011

Вы можете просто позволить методу вернуться. Затем рекурсия вернется назад, а остальные операторы будут выполнены.

3 голосов
/ 06 мая 2011

Вы можете вернуть статус из метода:

/**
 * @return false if the recursion has been aborted
 */
public boolean createTree(TreeNode tree) throws IOException {
    if (i >= preorder.length) {
        return false;
    } 
    else if (preorder[i] == '0') {
        tree.value = '0';
        tree.left = tree.right = null;
        i++;                
    } 
    else {
        tree.value = preorder[i];
        i++;
        tree.left = new TreeNode();
        if (!createTree(tree.left)) {
            return false;
        };
        tree.right = new TreeNode();
        if (!createTree(tree.right)) {
            return false;
        }
    }
}
0 голосов
/ 06 мая 2011

Вы можете использовать исключение времени выполнения, но я не думаю, что это хороший дизайн.

Если моя рекурсия зашла так далеко, это означает, что это было необходимо ... и я, вероятно, буду использовать возврат

0 голосов
/ 06 мая 2011

вы могли бы выбросить исключение, но это кажется "грязным"

...