0

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

4

2 回答 2

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)
于 2013-06-27T01:21:26.290 回答
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)
于 2013-06-27T02:13:31.560 回答