如何在Java中实现递归

如何在Java中实现递归? 我的问题是在Java中执行recusrsive方法时会发生什么。 我隐约明白它使用了Stack,但我正在寻找一个清晰的例子说明。

Java中的递归处理方式与其他(命令式)语言的处理方式不同。

有一个堆栈 ,它为每个方法调用保存一个堆栈帧。 该堆栈是调用堆栈 (或者只是“堆栈”,当上下文清楚地表明它是什么意思时)。 堆栈上的元素称为“堆栈帧”。

堆栈帧包含传入的方法参数和方法调用的局部变量(以及可能的一些其他数据,例如返回地址)。

当方法调用自身(或实际上是任何方法)时,将为新调用的方法的参数和局部变量创建新的堆栈帧。

在方法执行期间,代码只能访问当前 (即最顶部)堆栈帧中的值。

这样,单个(本地)变量看起来可能同时具有许多不同的值。

除了多个堆栈帧将同时表示同一方法的调用之外,不会以正常方法调用之外的任何其他方式处理递归。

当一个方法被调用时,它需要空间来保持其参数,它的局部变量和返回地址这个空间被称为激活记录(stack frame)。

递归调用的方法恰好与调用者具有相同的名称,因此递归调用不是一个调用它自己的方法,而是调用另一个同一原始实例的方法的实例化 。 这些调用由不同的激活记录在内部表示,这意味着它们由系统区分。