Есть ли способ внезапно вернуться к методу, который вызывает метод ниже, когда условие выполнено?Нечто похожее на разрыв для циклов.
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); } }
Спасибо.
Вы можете просто позволить методу вернуться. Затем рекурсия вернется назад, а остальные операторы будут выполнены.
Вы можете вернуть статус из метода:
/** * @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; } } }
Вы можете использовать исключение времени выполнения, но я не думаю, что это хороший дизайн.
Если моя рекурсия зашла так далеко, это означает, что это было необходимо ... и я, вероятно, буду использовать возврат
вы могли бы выбросить исключение, но это кажется "грязным"