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

2024-05-19 01:44:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图编写一个程序,在一维数组中找到非相邻元素的最大和,到目前为止我有:

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循环,如何将这个函数转换成递归函数?我的大脑似乎找不到办法。你知道吗


Tags: 程序元素newforreturnifdef数组
1条回答
网友
1楼 · 发布于 2024-05-19 01:44:21

步骤1:重写函数,使其更具python风格

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

第一步不是绝对必要的。毕竟,它是关于for i in arr:中的代码块以及它们如何影响inclexcl。不过,它可能会帮助你重写。你知道吗

相关问题 更多 >

    热门问题