了解堆栈帧在递归函数中的工作原理

时间:2015-06-03 03:16:38

标签: python function recursion stack frame

Python / CS新手在这里,尝试理解特定的递归函数如何工作"引擎盖下#34;就功能的堆栈帧如何运作以及它们所持有的值而言。"

我知道很多关于递归函数的编写/发布在这里,并且有关于它们如何工作的说明性示例,但是递归的概念以及堆栈如何工作/它们在递归函数中的作用是有点棘手的我没有找到任何简明扼要的解释。

我们假设我们有以下递归函数来反转字符串中的字符:

text = "hello"
def reverse_string(text):
        if len(text) <= 1:
            return text
        return reverse_string(text[1:]) + text[0]

输出:olleh

我认为reverse_string(text[1:])的框架工作如下:

Global frame
text    "hello"
reverse_string  

reverse_string
text    "hello"

reverse_string
text    "ello"

reverse_string
text    "llo"

reverse_string
text    "lo"

reverse_string
text    "o"

Return
value   "o"

但是返回值"o"并且满足终止基本条件后会发生什么? text[0]如何在函数中工作以最终到达"olleh"

1 个答案:

答案 0 :(得分:2)

只是举个例子散步。

一旦我们达到终止条件,剩下的帧就会以相反的顺序弹出。

假设我们达到终止条件,return text是&#34;命中&#34;并返回text = "o"。然后在上一帧中我们有reverse_string(text[1:]) + text[0],但这只是reverse_string("o") + "l" = "o" + "l" = "ol" = reverse_string(text[1:]),其中reverse_string(text[1:])是来自前一帧的调用(text等于&#的调用34; LLO&#34)。继续这个逻辑,reverse_string("lo") + "l" = "ol" + "l" = "oll"

我们继续这个想法,直到我们到达&#34; top&#34;我们最终回归的框架&#34; olleh&#34;。