【问题标题】:Recursion explanation with two return statements带有两个返回语句的递归解释
【发布时间】:2018-12-27 07:38:30
【问题描述】:

大家好,这个递归函数需要帮助,g(2)g(0)g(-5) 在这个函数中的结果是什么。

public static int g(int v) {
    if (v>5) {
      return 0;
    }
    if (v<=0) {
      return Math.abs(v)+g(v+2);
    }
    return (v-1)+g(v+1);

我了解了递归的一般要点,我知道 g(2) 产生 10 但我很幸运,因为这个数字路径从未使用过第一个 return 语句。我不确定g(0)g(-5) 将如何工作......因为第一个return 语句被唤起。有人可以解释一下吗?

【问题讨论】:

  • 尝试使用调试器调试它。将所有步骤写在一张纸上,然后尝试找出为什么
  • 关注paper stack recursion model,用纸和铅笔自己动手。

标签: java recursion return


【解决方案1】:

您可以通过在一张纸上写下表达式并继续扩展它并看看您得到什么来轻松做到这一点。

对于g(0),运行第二个 if 语句:

|0| + g(2)

对于g(2),我们已经知道它是10,所以g(0) 也是10。

对于g(-5),运行第二个 if 语句:

|-5| + g(-3)

然后再次运行第二个 if 语句:

5 + |-3| + g(-1)

再说一遍:

8 + |-1| + g(1)

现在,运行最后一个 return 语句:

9 + (1 - 1) + g(2)

g(2) 已知为 10,所以

9 + 10 = 19

【讨论】:

    【解决方案2】:
    • g(2) 返回 10
    • g(0) 也返回 10(第二个,如果执行返回 10 的语句

      数学.abs(0) + g(0+2) = 10)

    • g(-3)

      数学(-3) + g(-1) = 14

    • g(-1)

      数学(-1) + g(1) = 11

    • g(-5) 返回 19(第二个 if 语句被执行,返回 19

      数学.abs(-5) + g(-3)) = 19

    【讨论】:

      猜你喜欢
      • 2021-04-28
      • 2015-12-22
      • 2018-10-26
      • 2010-10-30
      • 2019-10-07
      • 2021-08-31
      • 1970-01-01
      • 2016-02-13
      • 2017-07-21
      相关资源
      最近更新 更多