如何在Java中实现递归

时间:2012-05-22 10:46:55

标签: java recursion

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

2 个答案:

答案 0 :(得分:11)

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

a stack,它为每个方法调用保存一个堆栈帧。该堆栈是call stack(或简称为“堆栈”,当上下文清楚地表明其含义时)。堆栈中的元素称为“堆栈帧”。

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

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

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

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

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

答案 1 :(得分:0)

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

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