首页 > 解决方案 > 将递归与循环相结合以找到最大值

问题描述

我正在尝试解决递归练习并变得非常困惑。问题如下:

假设我有一个 n 平方米的公寓,i = [1,2,3..., n] 是平方米的单位,[p1, p2, p3, ..., pn] 是相应的价格每平方米(例如,p1 是 1 平方米的价格,pn 是 n 平方米的价格)。

我想找到划分我的公寓的最佳方式,这会给我带来“最大的收入”。

示例 - 如果我有 4 平方米的公寓,并且尺寸 1、2、3、4 的价目表相应地是 [1、5、8、9],那么这些是一组选项:

因此我的函数“profit”应该返回数字10作为输入:profit([1,5,8,9], 4)

我被要求使用以下模式解决这个问题,其中递归调用必须仅在循环内:

def profit(value, size):
    ...
    for i in range(size):
        ...
    return ...

很长一段时间后,我设法在没有循环条件的情况下解决了这个问题,但这真的让我感到沮丧,递归函数是多么困难和不直观。对于此类问题,我非常感谢一般指导提示,或者即使您可以将我推荐给其他可能有助于我更好地学习该主题的资源。有时我很难跟上。

当然,感谢您对这个特定功能的帮助......

标签: pythonpython-3.xloopsrecursion

解决方案


使用以下函数解决了它:

def profit(value,size):
    if size <= 0:
        return 0
    lst1 = []
    for i in range(size):
        lst1.append(profit(value, size-(i+1))+value[i])
    return max(lst1)

推荐阅读