如何在递归函数中存储值



假设你有以下递归函数。假设节点参数是头部:

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 ,但它允许您修改紧邻函数作用域的值。

最新更新