【问题标题】:Recursive reverse array printing递归反向数组打印
【发布时间】:2013-04-15 21:14:15
【问题描述】:

我在一个答案中看到了这个算法,现在我有疑问 是一个递归函数,有两个参数,一个整数数组和一个整数。 目标是打印数组,但以相反的顺序,我测试它并且它有效!但我不知道为什么......这是函数

public static void reverse(int[] a, int position) {
          // BASE
          if (position == a.length)  return;
          // RECURSIVE

          reverse(a, position + 1);

          System.out.println(a[position]);
        }

}

如果条件为真,返回不代表程序结束? 如果它是假的,该函数将在不打印数字的情况下进行递归调用,或者不? 谢谢!

【问题讨论】:

  • 使用调试器并按照流程进行。

标签: java recursion


【解决方案1】:

return 语句并不意味着程序将结束。这意味着该方法的特定调用结束。

下一个语句是递归调用。它不断调用从0 到数组长度的每个可能的position。因此,代码第一次通过递归调用是在最后一个递归方法返回之后,position 现在位于数组的末尾。然后它打印最后一个字符。它返回,并且之前的递归调用(具有之前的 position 值)打印倒数第二个字符,依此类推,直到对递归方法的原始调用打印出第一个字符,然后就完成了。

例如对于长度为 3 {10, 11, 12}

的数组
reverse(a, 0)
    reverse(a, 1)
        reverse(a, 2)
            reverse(a, 3)
            base case; return
        print a[2] "12"
    print a[1] "11"
print a[0] "10"
done

【讨论】:

    【解决方案2】:

    return 不是“退出”语句。 return 将程序返回到调用方法的位置并执行下一行。 System.exit(0) 将结束您的程序并停止所有执行。

    【讨论】:

      【解决方案3】:

      这背后的关键概念是,您需要了解堆栈是如何工作的。对函数的每次调用都是一个堆栈,不管它是从其他函数调用还是从自身调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-02
        • 2021-11-30
        • 2014-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-06
        • 1970-01-01
        相关资源
        最近更新 更多