所以我在做coderbyte的挑战,我有问题之一: ArrayAdditionI,这里的问题的声明:Python的阵列加入递归
“”” 使用Python语言,具备的功能ArrayAdditionI(ARR)采用存储在arr 中的数字数组,并返回字符串true,如果可以将数组中的任意数字组合加起来等于数组中的最大数字,则返回字符串false。 例如:如果arr包含[4,6,23,10,1,3],则输出应该返回true,因为4 + 6 + 10 + 3 = 23。 数组将不会为空,不会包含所有相同元素,并可能包含负数。 “””
因为我不能这样做,我研究了一个解决方案,我发现这一点:
def countFor(arr, m, s0):
if len(arr) == 0:
return False
a0 = arr[0]
ar = arr[1:]
sw = s0 + a0
if sw == m:
return True
if countFor(ar, m, sw):
return True
if countFor(ar, m, s0):
return True
return False
def ArrayAdditionI(arr):
m = max(arr)
arr.remove(m)
return str(countFor(arr, m, 0)).lower()
现在,我想确切地理解代码的功能上的每个回路是什么,我打印出来的这个列表的每一个循环的输出[4,6,23,10,1,3]:
Input: [4, 6, 10, 1, 3] 23 0
a0: 4
ar: [6, 10, 1, 3]
sw: 4
Input: [6, 10, 1, 3] 23 4
a0: 6
ar: [10, 1, 3]
sw: 10
Input: [10, 1, 3] 23 10
a0: 10
ar: [1, 3]
sw: 20
Input: [1, 3] 23 20
a0: 1
ar: [3]
sw: 21
Input: [3] 23 21
a0: 3
ar: []
sw: 24
Input: [] 23 24
Input: [] 23 21
Input: [3] 23 20
a0: 3
ar: []
sw: 23
True
,我跟随并了解发生了什么事情,直到最后三个环路,我不代码的哪一部分使它从“输入:[] 23 24”到“输入:[] 23 21”到“输入:[3] 23 20”。