假设您具有以下递归函数。假设node参数是head:
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
会在初始化时重新初始化,因此它无法存储值并返回正确的字符串。每个电话。是否有功能上的解决方案,还是我必须依靠全局变量?
答案 0 :(得分:2)
在一种情况下,您不会返回任何值。编写正确,您的函数应如下所示:
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
很像,但是它可以让您修改紧邻函数范围的值。