递归反向阵列打印

时间:2013-04-15 21:14:16

标签: java recursion

我在一个答案中看到了这个算法,现在我有疑虑 是一个带有两个参数的递归函数,一个整数数组和一个整数。 目标是打印阵列,但顺序相反,我测试它,它的工作原理!但我不知道为什么......这是函数

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

          reverse(a, position + 1);

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

}

如果条件为真,则返回并不意味着程序将结束? 如果它是假的,该函数将执行递归调用而不打印数字,或不? 谢谢!

3 个答案:

答案 0 :(得分:2)

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

下一个语句是递归调用。它始终使用position0到数组长度的每个position调用自身。所以代码第一次通过递归调用是在最后一个递归方法返回后,position现在位于数组的末尾。然后它打印最后一个字符。它返回,之前的递归调用(具有前一个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 值)打印倒数第二个字符,依此类推,直到对递归方法的原始调用打印出第一个字符,然后完成

E.g。对于长度为3 {10,11,12}的数组

{{1}}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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