Python 递归在这段代码中究竟是如何工作的

Python 递归在这段代码中究竟是如何工作的,python,Python,我有这段代码,但它不是我的,我在网上看到它,我想知道递归是如何工作的,请有人解释一下 (此函数接受一个整数列表(距离)和一个值“r”(假设为10),并返回使用距离达到100的所有可能性)假设列表为[3,5,2,5],值r为10!因此,要制作10,我们需要[5,5]或[3,2,5],以下是代码: def greedy(r, distances): if r < 0: return [] if r == 0: return [[]] solutions = [] for las

我有这段代码,但它不是我的,我在网上看到它,我想知道递归是如何工作的,请有人解释一下

(此函数接受一个整数列表(距离)和一个值“r”(假设为10),并返回使用距离达到100的所有可能性)假设列表为
[3,5,2,5]
,值
r
10
!因此,要制作
10
,我们需要
[5,5]
[3,2,5]
,以下是代码:

def greedy(r, distances):
if r < 0:
    return []
if r == 0:
    return [[]]
solutions = []
for last_distance in d:
    combos = greedy(r - last_distance, d)
    for combo in combos:
        combo.append(last_distance)
        if(not solutions.__contains__(combo)):
            solutions.append(combo)
return solutions
def贪婪(r,距离):
如果r<0:
返回[]
如果r==0:
返回[]]
解决方案=[]
对于d中的最后一个_距离:
组合=贪婪(r-最后的距离,d)
对于组合中的组合:
附加(最后的距离)
如果(不是解决方案._包含_(组合)):
解决方案追加(组合)
返回解决方案

我希望我已经说清楚了

我建议使用python打印函数

print("")
在多个位置可以实际看到递归的发生。你会得到一个比别人向你解释更好的主意

虽然函数本身很简单。对于距离中的每个元素,该函数从所需的
r
值中减去该元素,并使用if条件检查该值。 如果
r
值为零,即对于距离中的某些元素,它们的和为
r
,则返回一个多列表,该列表还包含所述元素


最后,将其和添加到
r
的元素的完整列表附加到
解决方案
列表并返回。

假设给定长度
n
的列表
distances0
,可以返回所有元组
i1,。。,在
中,对于任何数字
r
,求和到一个数字的列表中

对于长度为
n+1
的列表
distance
,您也希望执行相同的操作。 由于您知道如何解决大小为
n
的列表的问题,您将执行以下操作:对于
距离的每个元素
最后的距离
,返回所有元组
i1,。。。,在
中,从一个类似于
距离但没有元素的列表距离0中求和到最后距离(因此长度
n

我认为代码中可能有一些错误,这里应该有一个工作版本:

def greedy(r, distances):
    if r < 0:
        return []
    if r == 0:
        return [[]]
    solutions = []
    for i in range(len(distances)):
        d = distances[:i]+distances[i+1:]
        last_distance = distances[i]
        combos = greedy(r - last_distance, d)
        for combo in combos:
            combo.append(last_distance)
            if(not solutions.__contains__(combo)):
                solutions.append(combo)
    return solutions
def贪婪(r,距离):
如果r<0:
返回[]
如果r==0:
返回[]]
解决方案=[]
对于范围内的i(len(距离)):
d=距离[:i]+距离[i+1:]
最后距离=距离[i]
组合=贪婪(r-最后的距离,d)
对于组合中的组合:
附加(最后的距离)
如果(不是解决方案._包含_(组合)):
解决方案追加(组合)
返回解决方案

递归只是调用方和被调用方相同的函数调用。递归的工作原理和任何其他函数调用一样。我甚至不认为这是递归…他在回忆greedyYou应该正确缩进代码。缩进严重的Python代码是胡说八道。