0

我正在构建一个程序,它将以递归方式对给定列表中的数字求和。比如说,如果源列表有 10 个元素,那么第二个列表将有 9 个,第三个列表将有 8 个,依此类推,直到最后一个只有一个元素的列表。这是通过将第一个元素添加到第二个元素,然后将第二个元素添加到第三个元素等等来完成的。我被困在没有来自 shell 的反馈的情况下。它在没有任何错误的情况下停止,然后在几秒钟内风扇像疯了一样旋转。

我在这里阅读了很多帖子并改变了我的方法,但我不确定到目前为止的内容能否产生我正在寻找的结果。提前致谢:

#---------------------------------------------------
#functions
#---------------------------------------------------

#sum up pairs in a list
def reduce(inputList):
    i = 0
    while (i < len(inputList)):
        #ref to current and next item
        j = i + 1
        #don't go for the last item
        if j != len(inputList):
            #new number eq current + next number
            newNumber = inputList[i] + inputList[j]
            if newNumber >= 10:
                #reduce newNumber to single digit
                newNumber = sum(map(int, str(newNumber)))
            #collect into temp list
            outputList.append(newNumber)
        i = i + 1
    return outputList;


#---------------------------------------------------
#program starts here
#---------------------------------------------------

outputList = []
sourceList = [7, 3, 1, 2, 1, 4, 6]
counter = len(sourceList)

dict = {}
dict[0] = sourceList

print '-------------'
print 'Level 0:', dict[0]

for i in range(counter):
    j = i + 1
    if j != counter:
        baseList = dict.get(i)
        #check function to understand what it does
        newList = reduce(baseList)
        #new key and value from previous/transformed value
        dict[j] = newList        
        print 'Level %d: %s' % (j, dict[j])
4

1 回答 1

2

您的程序始终使用outputList您在外部定义的相同内容。每次调用都必须清除它reduce。相反,您可以创建一个具有相同名称的局部变量。为此,您只需将定义移动outputList到这样的reduce函数中

def reduce(inputList):
    outputList = []
    i = 0

输出

-------------
Level 0: [7, 3, 1, 2, 1, 4, 6]
Level 1: [1, 4, 3, 3, 5, 1]
Level 2: [5, 7, 6, 8, 6]
Level 3: [3, 4, 5, 5]
Level 4: [7, 9, 1]
Level 5: [7, 1]
Level 6: [8]
于 2013-11-09T03:55:59.280 回答