【发布时间】:2014-02-28 16:31:12
【问题描述】:
我正在查看一些 Java 算法示例,并且在递归方法中遇到了这个 sn-p 代码:
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));
}
不知道(也从未见过)||之前在 return 语句中使用过,更不用说递归了,真的让我很困惑。我将代码复制到 Eclipse 中以查看它是否有效。然后我替换了||与 && 和 Eclipse 似乎并没有被它打扰。从逻辑上讲,我知道这个递归代码应该沿着 TreeNode t1 的左右子树继续下去,但我正在寻找这个 Java 语法如何工作的更多理论解释。
谁能解释一下背后的含义||和 && 在 Java 的 return 语句中?它在递归方面是什么意思?只有和递归结合使用才有意义吗?
【问题讨论】:
-
您通常如何使用
return语句?你给它的表达是什么?你可以做return a + b,那为什么不return c || d呢?||和&&只是运算符。 -
它是递归的或表达式不相关,也不是递归的和表达式。
-
重点是返回一个布尔值。表达式 **(function(a) && function(b) ) ** 确实是一个布尔值,只要 function(int) 返回一个布尔值。
-
就像其他人基本上所说的那样,return语句只不过是一个表达式。唯一的“特殊”是它使用递归来评估表达式。另外,考虑用
boolean r = (subTree(t1.left, t2) || subTree(t1.right, t2));替换该行,然后用return r;
标签: java algorithm recursion syntax return