假设你有以下递归函数。假设节点参数是头部:
def to_string(node):
a_str = ""
if node.next != None:
a_str += str(node.val)
to_string(node.next)
else:
return a_str
我想记录所有节点的值。代码能够获取值,因为它正在使用下一个节点 to_string(node.next)
调用自身,但它无法存储值并返回正确的字符串,因为每次调用时都会重新初始化a_str
。是否有函数内解决方案,或者我必须依赖全局变量?
在一种情况下,您不会返回值。如果编写得当,您的函数应如下所示:
def to_string(node):
a_str = str(node.val)
if node.next != None:
a_str += to_string(node.next)
return a_str
字符串是不可变的,因此无需初始化为当前节点以外的任何内容。
至于回答你关于如何以python方式将东西存储在递归函数中的问题:你可以使用嵌套函数。嵌套函数可以在主函数作用域中使用非局部变量来模拟全局变量,而不会泄漏任何内容:
def to_string(node):
def actual_recursive(node):
nonlocal a_str
a_str += str(node.val)
if node.next != None:
actual_recursive(node.next)
a_str = ''
actual_recursive(node)
return a_str
nonlocal
关键字很像 global
,但它允许您修改紧邻函数作用域的值。