如何在递归函数中存储值?

时间:2019-01-26 07:56:03

标签: python recursion linked-list

假设您具有以下递归函数。假设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会在初始化时重新初始化,因此它无法存储值并返回正确的字符串。每个电话。是否有功能上的解决方案,还是我必须依靠全局变量?

1 个答案:

答案 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很像,但是它可以让您修改紧邻函数范围的值。