在leetcode问题上遇到了类似的模式.基本上,这两个函数都使用非局部值递归地求和列表a.未分配的值只会在出现时更新res
.
def assigned_sum(l: list[int]):
res = 0
def recurse(i: int):
nonlocal res
if i >= len(l):
return 0
assigned = recurse(i+1)
res += assigned
return l[i]
recurse(-1)
return res
def rvalue_sum(l: list[int]):
res = 0
def recurse(i: int):
nonlocal res
if i >= len(l):
return 0
res += recurse(i+1)
return l[i]
recurse(-1)
return res
test = [1,2,3,4,5]
f"expected={sum(test)}, lvalue={assigned_sum(test)}, rvalue={rvalue_sum(test)}"
当我被扔进可乐,我得到'expected=15, lvalue=15, rvalue=1'