Sam*_*eow 7 java algorithm syntax recursion return
我正在看一些Java算法示例,我在递归方法中遇到了这个代码片段:
boolean subTree(TreeNode t1, TreeNode t2) {
if (t1 == null) {
return false;
}
if (t1.value == t2.value) {
if (treeMatch(t1, t2))
return true;;
}
return (subTree(t1.left, t2) || subTree(t1.right, t2));
}
Run Code Online (Sandbox Code Playgroud)
不知道(也从未见过)|| 在之前的返回语句中使用,更不用说递归语句了,真让我感到困惑.我将代码复制到Eclipse中以查看它是否有效.然后我替换了|| 用&&和Eclipse似乎并没有被它打扰.从逻辑上讲,我理解这个递归代码应该继续沿着TreeNode t1的左右子树,但我正在寻找关于这种Java语法如何工作的更多理论解释.
有人可以解释||背后的含义 和Java的返回声明中的&&?在递归方面它意味着什么?它是否仅在与递归一起使用时才有意义?
Kon*_*kov 12
如方法签名中所定义,您必须返回一个boolean.因此,在return关键字之后,您将必须提供一个boolean 或一个被评估的表达式boolean.
在你的情况下,你有(subTree(t1.left, t2) || subTree(t1.right, t2));两个操作数将被评估的开发,只有当第一个评估时才会对它们boolean应用逻辑.如果第一个操作数计算到第二个操作数将不会被评估并将被撤销.ORfalsetruetrue
无论是否存在递归语句,它们都以相同的方式工作.在你的表达中:
(subTree(t1.left, t2) || subTree(t1.right, t2))
Run Code Online (Sandbox Code Playgroud)
如果第一次调用subTree(t1.left, t2)求值true,则不会调用或尝试计算第二个表达式.这只是||和&&运算符的标准短路行为,也就是运算符如何处理赋予它们的任何参数.