gpt4 book ai didi

python - 在python中将for循环转换为递归函数时遇到问题

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:44 24 4
gpt4 key购买 nike

我正在尝试编写一个程序来查找一维数组中不相邻元素的最大总和,到目前为止我有这个:

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 循环的情况下将此函数转换为递归函数?我的大脑似乎无法找到执行此操作的方法。

最佳答案

第 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: 中的代码块以及它们如何影响 inclexcl。但是,它可能会帮助您重写。

关于python - 在python中将for循环转换为递归函数时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42780746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com