递归函数在重复数据后会继续使用数据吗?



假设我有一个使用请求模块的python脚本。它执行一系列步骤,例如发布数据和处理多个请求。

在脚本中的某个时刻,会引发错误并排除错误,并且函数在 except 下递归地重新运行;也就是说,函数在except块中运行。

当该递归函数再次运行时,从上一次运行函数传输的数据是否会延续到下一次运行中?我注意到,在函数完全完成后,它重复的次数会打印回来,并在终端中出现错误。

它不保留之前对该函数的调用的任何状态。如果有函数的本地数据需要在调用之间共享,则应将其作为参数传递给函数。

但是,对该函数的每次调用都具有相同的作用域。任何保留在可用函数之外的数据都将在递归调用之间共享。例:

s = "Hello"
def fact (x):
s = "Bye"
v = x
if x == 1:
return 1
else:
return x * fact (x - 1)

在那里,对fact的第一次调用将更改s的值,并且对于所有函数调用(以及使用s的任何其他位置(都会更改。但是,当你递归地调用事实时;变量v在该调用中设置之前不等于x + 1,它在该范围内尚不存在。如果要保留它,fact应将其作为参数接收。

关于打印的错误:考虑到当你递归调用函数时,函数的调用方"实例"不会结束。在递归调用结束之前,它不会结束,程序的"控件"返回到进行调用的特定实例并正常完成。

查看本文以获得更好的解释,尤其是调用堆栈部分。

https://medium.freecodecamp.org/how-recursion-works-explained-with-flowcharts-and-a-video-de61f40cb7f9

最新更新