在Python中的递归函数期间分配列表

时间:2013-06-26 10:45:31

标签: python python-2.7

我需要帮助在递归函数中分配列表。当递归函数在i th 迭代中时,如何为列表的i th 成员赋值?

2 个答案:

答案 0 :(得分:0)

使用它来驱动迭代时你不能改变一个迭代,但是你可以轻松地创建一个可迭代来保存你的结果并将它作为参数传递给递归函数:

results = []

def recurse(level, results):
   level += 1
   results.append(level)
   if level < 10: recurse(level, results)

print recurse(0, results)
>>> [1,2,3,4,5,6,7,8,9,10]

但在此示例中,您可以执行

for item in results:
    recurse (item, results)

答案 1 :(得分:0)

我不知道我是否理解你的问题,但我认为它是这样的:

# put "s" on 2nd position of the list ['l', 'u', 'c', 'a', 's']
# so the result should be ['l', 's', 'c', 'a', 's']

如果是这样,请记住,有更好的方法可以在Python中执行此操作。所以这是代码:

def assign_in_position(elem, my_list, pos):
    first = my_list[0]
    tail = my_list[1:]

    if pos == 0:
        return [elem] + tail

    return [first] + assign_in_position(elem, tail, pos-1)

如果你是Python的新手,那么只有一件事可能很奇怪(切片,my_list[1:])。这个功能也有点儿,但它是推荐。它适用于我的第一个例子,但是如果你正在学习递归,那么你应该学习如何检测和解决常见的递归问题。

出于好奇,这是同一任务的Haskell代码:

assign_in_pos elem [] _ = [elem]
assign_in_pos elem (_:t) 0 = elem:t
assign_in_pos elem (h:t) pos = h:assign_in_pos elem t (pos-1)