我有一个if语句,它递归地调用自己在二叉查找树中查找值。
public BST<E> lookup(BST T, Comparable data) {
if (T.getData() == null) {
return null;
}
else if (T.getData().equals(data)) {
return T;
}
else {
if (data.compareTo(T.getData()) < 0) {
T = T.getLeft();
lookup(T, data);
}
else {
T = T.getRight();
lookup(T.getRight(), T.getData());
}
}
}
当我试图编译程序时,它会因为结尾没有return语句而感到不安。程序最终应该命中一个return语句,但为了使其编译,我在最后添加了一个return语句。但是程序总是从该语句返回,即使它在else-if语句中表示toreturn T
。我知道它到达了那个语句,但我不知道为什么它没有从那个语句中返回。
该方法根本没有击中返回。递归并不神奇。
lookup(T.getRight(),T.getData())
就是这个意思。这没什么不同,只是因为这是你自己的方法。也许你会想:太好了,这将完全中止这个方法调用,并将其从存在中消除,从顶部重新启动,现在它可以控制值的返回。
不。方法是可重入的:只是...调用查找方法(碰巧是同一个方法,但那是不相关的),将运行它,直到它返回一些东西,然后代码跳回到你调用查找的地方,继续它快乐的方式。
因此,为什么永不结束的递归会导致StackOverflowers错误——系统会记住所有这些查找方法,因为它们仍然在运行(当然,除了一个,所有这些方法都在等待另一个查找方法首先完成。不是多个线程,只是多个正在进行的调用)。
记住,与正常的方法调用没有什么不同。如果你写这段代码:
int foo() {
return scanner.nextInt();
}
然后,当JVM执行这个方法时,它将调用scanner
变量所指向的对象上的nextInt()
方法,等待它完成,然后获取它返回的内容,并使用这个值返回它自己。
递归没有什么不同。
我非常确定您在这里想要的是返回递归调用返回的任何内容,因此,您所需要的就是将Lookup(T, data)
替换为返回查找(T, data)。
请注意,您的其他类首先用它的右叉替换T,然后再次选择右叉。我打赌你不希望这样。
此外,命名变量T
几乎是最糟糕的名称。为type params保留大写字母。方法参数的正确命名约定是somethinglikethis(camelcase,其中第一个字母是小写)。
我不得不使用全局变量found来指示在哪里找到了一个和。返回语句始终未定义。 此外,如果在下面的if语句中使用return语句,代码将无法正常工作。 这不是问题的最佳解决方案,但这是我得到的工作版本。 返回语句之间的****,删除时代码工作,否则我要么得到false或未定义。我不明白这部分!为什么删除返回就能解决问题,我认为每个递归调用都必须用返回语句进行。 问题可能是由于多次呼叫造成的吗?我是不
if语句 (实际上是if表达式) OCaml有两种if语句: if boolean-condition then expression if boolean-condition then expression else other-expression 不同于传统的语言,if语句是表达式。它们更类似于C类语言中的三元操作符?: 而不是你所熟悉的if语句。 下面是if语句的简单例子: # le
问题内容: 为什么这给了我一个丢失的退货陈述错误?每个if / else都有返回值,最后一个括号出现错误 问题答案: 每个语句都在一个语句内。虽然从逻辑上讲这是不可能的,但是当所有评估都不为真时,编译器需要返回。 我建议: 我认为,此解决方案可解决编译器问题并稍微提高可读性。 或者,有以下解决方案: 引发异常将使你可以退出方法而无需返回任何信息……因为可以说,如果到达最后一个,显然会出错。
问题内容: 目前,我正在努力学习Python,而在递归函数方面却陷入了停滞。在Think Python中 ,练习之一是编写一个函数,该函数使用以下定义来确定 a 是否为 b 的幂: “如果a被b整除,则a是b的幂,而a / b是b的幂。编写一个名为is_power的函数,该函数接受参数a和b,如果a是b的幂,则返回True。” 我函数的当前状态是: 实际上,这产生了我期望的结果。但是,本章着重于编
有人能用简单的英语解释一下这句话背后的逻辑吗? 假设mContainsLoadingRow为布尔值,如果< code>mContainsLoadingRow为< code>true, 然后返回< code > getContentDataSize()1 。 如果没有,则返回 这是正确的看待方式吗?
主要内容:if 结构,if-else 结构,多条件 if-else-if 语句,嵌套 if 的使用Java 支持两种选择语句:if 语句和 switch 语句。其中 if 语句使用布尔表达式或布尔值作为分支条件来进行分支控制,而 switch 语句则用于对多个整型值进行匹配,从而实现分支控制。这些语句允许你只有在程序运行时才能知道其状态的情况下,控制程序的执行过程。如果你没有 C/ C++ 的编程背景,你将会为这两个语句的强大功能和灵活性而感到吃惊。 选择结构(也叫分支结构)解决了顺序结构不能