我似乎无法理解为什么会这样,一旦在递归函数中满足终止基本条件,该函数继续调用自身并返回调用堆栈。
这是一个用Python 2.7编写的递归函数示例:
local.properties
使用Python visualizer,我理解函数如何使用text = "hello"
def reverse_string(text):
if len(text) <= 1:
return text
return reverse_string(text[1:]) + text[0]
调用自身,每个帧的创建方式如下:
reverse_string(text[1:])
我的问题是:为什么在满足基本条件时(Frames
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"
)会触发文本[0]开始运行?我认为返回语句/行上的所有代码将同时协同工作,而不是先理解为什么text = "o"
先发生,然后reverse_string(text[1:])
- 再次,为什么text[0]
满足基本条件时激活?
答案 0 :(得分:2)
如果您实际写出调用,然后从每个调用返回的内容,可能会更有意义。从最上面的reverse("hello")
开始(对不起 - 缩短reverse_string
以进行懒惰输入):
1: return reverse('ello') + 'h'
2: return reverse('llo') + 'e'
3: return reverse('lo') + 'l'
4: return reverse('o') + 'l'
5: return 'o'
没有更多的调用,所以我们按照我们的方式备份调用堆栈,在我们重新启动时返回连接的结果:
'o' is returned from 5
'ol' is returned from 4
'oll' is returned from 3
'olle' is returned from 2
'olleh' is returned from 1
...并且作为对函数的最高调用的结果返回。