3

我必须在python中使用递归函数,下面的代码是一个简化的模型。我想在递归中保留结果列表和dict字典不生成新的列表或字典,并在递归后返回,如何解决?

def test(length):
    result = []
    dict = {}
    if length == 10:
        return result, dict
    else:
        result.append(length)
        dict[length] = length + 1
        test(length + 1)

x, y = test(0)
print x, y
4

2 回答 2

1

使用执行递归的辅助函数,以及使用初始默认值调用辅助函数的主函数。

def test(length):
    result = []
    dict = {}
    _test(length, result, dict)
    return result, dict

def _test(length, result, dict):
    if length == 10:
        return
    else:
        result.append(length)
        dict[length] = length + 1
        _test(length + 1, result, dict)

x, y = test(0)
print x, y
于 2012-10-29T01:22:00.157 回答
1

我认为你的递归有点坏了。

Python 提供了一些其他选项来做你想做的事。我喜欢这种格式:

def t(length, result = [], d = {}):
    if length == 10:
        return
    else:
        result.append(length)
        d[length] = length + 1
        t(length + 1)

    return (result, d)

x, y = t(0)
print x, y

数组和字典的初始化只发生在解释器看到函数时,而不是每次调用函数时。有关 python 中默认参数的详细介绍,请参阅此页面

在这种情况下,它们就像附加到函数的数组和字典一样。

于 2012-10-29T04:51:46.960 回答