0

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

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

          reverse(a, position + 1);

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

}

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

4

3 回答 3

2

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

下一条语句是递归调用。position它不断调用自己,从数组的长度到每个可能0的长度。因此,代码第一次通过递归调用是在最后一个递归方法返回之后,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
于 2013-04-15T21:21:10.557 回答
0

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

于 2013-04-15T21:20:21.083 回答
0

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

于 2013-04-15T21:35:41.717 回答