递归

设计一个递归函数, 考虑三个方面: 参数、 中间量、返回值

  • 参数: 设计递归表达式中包含的关键东西, 每一次调用,只有参数在改变。

  • 中间量:中间每次调用时,会在一个新的栈中存储,他在内存上和上次的变量是两块独立的空间,他们的行为只依赖于参数的变化。

  • 返回值: 需要所有过程共同的return值来完成。

每一次函数调用,都有一个独立的函数栈空间, 理解好这个就可以更好的理解递归。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
new_str = [] // 返回值
def recv(_str):
global new_str
if(len(_str) > 1): //中间量
x = _str.pop() //中间量
new_str.append(x)
recv(_str)
return new_str
else:
return _str

if __name__ == '__main__':
_str = ["H", "e", "l", "l", "0"] //参数
res = recv(_str)
print(res)

之前在遍历子路径时没想明白, 就在于我没有理解好每一次调用变量都存在独立的站。在递归返回上一级的时候,父函数在工作环境中继续施工,所以之前的内容都在。哈哈哈真的是,太菜了

(这里的new_str不写在递归区域, 因为new_str是返回值,所以不能每个过程都开一个新的,而是每次都将结果压入一个共同的空间中)