当前位置: 首页 > 知识库问答 >
问题:

在终止条件下使用或不使用返回语句的递归

充浩波
2023-03-14

请解释返回语句如何为trie的简单递归解析起作用

案例A:

if (true) push &stack; //push path result onto a stack
else{
   if (terminating condition true) return;
   else {
      condition 1 recursion to next node
      condition 2 recursions to next node
      ...
      condition n recursion to next node
   }
   recursion to next path;
}

案例B:

if (true) {
   push &stack; //push path result onto a stack
   return;
}else{
   if (terminating condition true) return;
   else{
      condition 1 recursion to next node
      condition 2 recursion to next node
      ...
      condition n recursion to next node
   }
   recursion to next path;
}

案例A对我很有效。但是,我不明白结果被推到堆栈后会发生什么。“it”如何知道终止这些路径?

共有2个答案

温源
2023-03-14

案例A之所以有效,是因为结果被推送到堆栈或向量,或者使用的任何结构,然后终止特定的路径。如果有返回,它会启动堆栈的解析,并返回到之前的迭代中。因此,在案例B中,只能找到一个结果。

拓拔骁
2023-03-14

对于返回类型为void的函数,严格来说不需要return语句。如果到达这样一个函数的结尾时没有遇到return语句,则控制权将传递给调用方,就像遇到了没有表达式的return语句一样。换句话说,隐式返回发生在final语句完成时,控件自动返回到调用函数。不管怎样,你不需要为另一行代码付费,添加一个return语句是一个很好的实践
但请注意,对于使用非void返回类型声明的函数,它是必需的。它有时在没有return语句的情况下工作,例如,这个:对函数返回值感到困惑。但这是一种未定义行为的结果。

 类似资料:
  • 我一直在玩流,然后我注意到当我执行以下操作时,它不会在控制台中产生输出: 我认为这是因为是一个非终止流方法,应该使用而不是来终止流并生成结果: 然而,是否有一种方法可以‘提前’终止流,使用一个自定义的终止方法(函数接口),它除了终止流之外什么都不做?..有没有一个适当的方法来利用Java现有的东西来做到这一点? 我知道我可以这样做: 但那感觉很浪费。

  • 我不得不使用全局变量found来指示在哪里找到了一个和。返回语句始终未定义。 此外,如果在下面的if语句中使用return语句,代码将无法正常工作。 这不是问题的最佳解决方案,但这是我得到的工作版本。 返回语句之间的****,删除时代码工作,否则我要么得到false或未定义。我不明白这部分!为什么删除返回就能解决问题,我认为每个递归调用都必须用返回语句进行。 问题可能是由于多次呼叫造成的吗?我是不

  • 问题内容: 已经晚了,所以这一定是愚蠢的。我已将LinqPad连接到我的数据库,但似乎无法获得最简单查询的结果。 当我运行它时,LinqPad说它成功执行了(C#语句模式)。什么都不会被搁置。 我可以编写以下非常简单的Lambda(C#表达式模式): 那行得通。为什么?我更喜欢使用非lambda查询构建功能。我敢肯定,这一切都是愚蠢的。 问题答案: 我希望在声明模式下,您必须执行类似call的操作

  • 我想在C#中使用组合框对条件进行数据过滤,所以我使用了这个存储过程: 参数由7个组合框补偿,但问题是我必须选择(所有)参数值来显示数据,这不是必需的,我想要的是显示数据,一旦我从任何组合框中选择(任何)值

  • 问题内容: 在以下方法中,即使通过该方法只有一条路径,并且编译器包含一条语句,编译器也会抱怨 缺少return语句。抑制该错误需要另一条语句。 鉴于Java编译器可以识别无限循环,为什么它也不能处理这种情况?链接的问题提示,但不提供此特定情况的详细信息。 问题答案: JLS14.21,“无法到达的语句”是处理此问题的部分: if语句(是否具有else部分)以异常方式处理。因此,本节末尾将单独讨论。

  • 我是一个初学者,我试图通过应用极小算法来开发Connect4游戏,我被困在决定是最小玩家回合还是最大玩家回合的条件下。我有一种感觉,这是一种简化,但我已经想了两天试图弄清楚。有什么帮助吗?