我试图使用递归打印一个数组的所有子集的和。但是我只得到一个和,并且递归函数内部变量的范围丢失了,因为下一个递归逻辑失败或我完整的递归逻辑不正确...
注意:也许我不能在说明中很好地解释我的方法。但是您可以通过查看代码来理解我要做什么。
变量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]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
答案 0 :(得分:2)
由于列表是可变的,因此赋值localTempArray = tempArray
,localTempArray只是对与tempArray相同的内存位置的引用,因此将反映对localTempArray的任何修改。
检查此个性化here
您可以使用复制模块
from copy import copy
localTempArray = copy(tempArray)
答案 1 :(得分:0)
python中的列表是可变类型。
localTempArray
和tempArray
引用相同的对象。
弹出localTempArray
时,也会弹出tempArray
。
无论如何,如果您想获得tempArray的子数组(元素0除外)。 试试这个
ybinarysum = localTempArray[0] + recursiveSum(localTempArray[1:])