Java 递归反向阵列打印

Java 递归反向阵列打印,java,recursion,Java,Recursion,我在一个答案中看到了这个算法,现在我有了疑问 是一个具有两个参数的递归函数,一个整数数组和一个整数。 我们的目标是打印数组,但以相反的顺序,我测试了它,它工作了!但我不知道为什么。。。下面是函数 public static void reverse(int[] a, int position) { // BASE if (position == a.length) return; // RECURSIVE rev

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

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

          reverse(a, position + 1);

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

}
如果条件为真,返回并不意味着程序将结束? 如果为false,函数将在不打印数字的情况下执行递归调用,还是不打印?
谢谢

return
不是“退出”语句
return
将程序返回到调用方法的位置,并执行下一行<代码>系统。退出(0)将结束程序并停止所有执行

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

下一条语句是递归调用。它使用从
0
到数组长度的每个可能的
位置
不断调用自己。因此,代码第一次通过递归调用是在最后一个递归方法返回之后,
position
现在位于数组的末尾。然后打印最后一个字符。它返回,上一个递归调用(具有previous
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

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

使用调试器并遵循流程。