Python递归:递归函数中变量的范围正在被覆盖

时间:2019-01-23 04:51:45

标签: python python-2.7 recursion

我试图使用递归打印一个数组的所有子集的和。但是我只得到一个和,并且递归函数内部变量的范围丢失了,因为下一个递归逻辑失败或我完整的递归逻辑不正确...

注意:也许我不能在说明中很好地解释我的方法。但是您可以通过查看代码来理解我要做什么。

变量localTempArray在第一个递归循环后失去作用域..我正在使用它进行另一个递归调用

请帮助我很好地理解递归...

谢谢

import sys

a = [2,4,8,16,32,64,128,256,512,1024]
print len(a)
def arrayPop(temp,i):
    try:
        temp.pop(i)
        return temp
    except:
        return temp
def recursiveSum(tempArray):
    localTempArray = tempArray
    print localTempArray
    if (len(tempArray) == 0):
        return 0
    ybinarysum = localTempArray[0] + recursiveSum(arrayPop(tempArray,0))
    print localTempArray
    recursiveSum(arrayPop(localTempArray,0))
    return ybinarysum

recursiveSum(a)

Current Output:

10
[2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
[4, 8, 16, 32, 64, 128, 256, 512, 1024]
[8, 16, 32, 64, 128, 256, 512, 1024]
[16, 32, 64, 128, 256, 512, 1024]
[32, 64, 128, 256, 512, 1024]
[64, 128, 256, 512, 1024]
[128, 256, 512, 1024]
[256, 512, 1024]
[512, 1024]
[1024]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]

2 个答案:

答案 0 :(得分:2)

由于列表是可变的,因此赋值localTempArray = tempArray,localTempArray只是对与tempArray相同的内存位置的引用,因此将反映对localTempArray的任何修改。

检查此个性化here

您可以使用复制模块

from copy import copy
localTempArray = copy(tempArray)

答案 1 :(得分:0)

python中的列表是可变类型。 localTempArraytempArray引用相同的对象。

弹出localTempArray时,也会弹出tempArray

无论如何,如果您想获得tempArray的子​​数组(元素0除外)。 试试这个

ybinarysum = localTempArray[0] + recursiveSum(localTempArray[1:])