Java中的递归是如何实现的?我的问题是关于在 Java 中执行递归方法时会发生什么。我隐约明白它使用堆栈,但我正在寻找一个清晰的解释与示例。
问问题
2099 次
2 回答
11
Java 对递归的处理与其他(命令式)语言没有太大区别。
有一个堆栈为每个方法调用保存一个堆栈帧。该堆栈是调用堆栈(或者只是“堆栈”,当上下文清楚地表明其含义时)。堆栈上的元素称为“堆栈帧”。
堆栈帧保存传入的方法参数和方法调用的局部变量(可能还有一些其他数据,例如返回地址)。
当一个方法调用自己(或者实际上是任何方法)时,就会为新调用的方法的参数和局部变量创建一个新的堆栈帧。
在方法执行期间,代码只能访问当前(即最顶层)堆栈帧中的值。
这样,单个(局部)变量似乎可以同时具有许多不同的值。
除了正常的方法调用之外,没有其他方式处理递归,除了多个堆栈帧将同时表示同一方法的调用。
于 2012-05-22T10:51:09.240 回答
0
当一个方法被调用时,它需要空间来保存它的参数、它的局部变量和返回地址,这个空间被称为激活记录(堆栈帧)。
递归正在调用一个恰好与调用者同名的方法,因此递归调用实际上并不是一个调用它自己的方法,而是一个调用相同原始实例的另一个方法的实例化。这些调用在内部由不同的激活记录表示,这意味着它们由系统区分。
于 2012-05-22T11:12:54.163 回答