繁体   English   中英

Python理解递归程序

[英]Python understanding recursive program

我试图理解以下程序以从给定列表中找到形成给定总和的子集的数量。

def count_sets(arr, total):
    return rec(arr, total, len(arr)-1)


def rec(arr, total, i):
    print(arr, total, i)
    if total == 0:
        return 1
    if i < 0:
        return 0

    if arr[i] > total:
        return rec(arr, total, i-1)

    else:
        return rec(arr, total-arr[i], i-1) + rec(arr, total, i-1)

arr = [2,10,6,4]
print(count_sets(arr, 16))

该程序运行没有任何错误,但是,我无法找到它是如何工作的。

它是一种回溯算法。 递归rec(arr, total, i) ,它选取剩余数组中的最后一个元素arr[i] ,这里有两种主要情况:

  1. 使用arr[i] : rec(arr, total-arr[i], i-1)
  2. 不使用arr[i] : rec(arr, total, i-1) ,当arr[i] > total当然你只能不使用它。

并且我们必须有recursion终止条件,即:

  1. [成功] 找到等于total的子数组: if total == 0: return 1
  2. [失败] 到达头部: if i < 0: return 0

希望我说清楚,如果您有进一步的问题,请发表评论。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM