python递归函数中通过for循环构建树 for循环运作逻辑

最近工作忙到死 以前也一知半解的 现在彻底想不起来了 脊椎也痛,索性就直接问吧
是这样子的 有哪位可以给我讲述一下通过递归构建树的时候内部for循环的运作逻辑 为啥图1的for循环长这个样子 for循环这些数字代表啥意思 图1成功构建了一个树

img

大家可以看我之前打赏记录 我得到满意答案会给钱的放心

img

def recDCCC(weightlist,maxweight,num,lk,value,llp):
    if num==4:
        return llp ##递归结束条件 并开始新的一轮递归
    if maxweight>20:
        return llp
    ###op.append([val for val in ok if val not in weightlist])##将OK表中不属于valuelist的元素,重复元素剔除出来,除非重复是8,发生重复,立即结束
    else:
        for i in range(len(weightlist)): 
                    print(i)
                    p=weightlist[i][0]
                    l=weightlist[i][1]
                    c=list(set(weightlist)-set([weightlist[i]]))## 被抽出的因子,剩余的进去迭代,剩余的部分便是C
                    llp.append(c)
                    numcoins=recDCCC(c,maxweight+p,num+1,lk+l,value,llp)
    return llp


recDCCC([(2,3),(3,4),(4,8),(5,8),(9,10)],0,0,0,0,[])

重新更新回答,简单的说说前面的执行步骤,其实一步一步按照程序执行流程演算下去就行了。文字实在难以解释,可以+V私聊说明

img

没什么复杂的逻辑,就是深度搜索(dps),将每一层的可能性都搜索完,再回到上一层继续递归。
画了个草图稍作解释,用鼠标画出了递归和for循环的轨迹,没有画完,也画不下,但每一层都是重复的。

img


绿色小框代表for循环的范围,随着向下列表长度的减少,范围也减少,比如在第一层当列表长度是5的时候,循环的范围是0到4,向下每层范围递减

这是最后的output 也是一个比较标准的树结构

img