我正在尝试编写一个程序,找到一维数组中不相邻元素的最大总和,到目前为止,我有这个:
def find_max_sum(arr):
incl = 0
excl = 0
for i in arr:
# Current max excluding i
new_excl = excl if excl>incl else incl
# Current max including i
incl = excl + i
excl = new_excl
# return max of incl and excl
return (excl if excl>incl else incl)
有效。我唯一的问题是如何在不使用for循环的情况下将此函数转换为递归函数?我的大脑似乎无法找到办法。
答案 0 :(得分:2)
第1步:重写你的功能,使其更像Pythonic
def find_max_sum(lst):
incl, excl = 0, 0
for i in lst:
incl, excl = excl + i, max(excl, incl)
return max(excl, incl)
第2步:现在很容易将其重写为递归函数
def find_max_sum_recursive(lst, incl, excl):
if len(lst) > 0:
i = lst[0]
incl, excl = excl + i, max(excl, incl)
return find_max_sum_recursive(lst[1:], incl, excl)
else:
return incl, excl
def call_find_max_sum_recursive(lst):
return max(find_max_sum_recursive(lst, 0, 0))
现在你打电话
>>> call_find_max_sum_recursive([1, 2, 10, 3, 4])
15
步骤1并非绝对必要。毕竟它是关于for i in arr:
中的代码块以及它们如何影响incl
和excl
。但是它可能会帮助你重写。