超过10000个节点的python递归

2024-09-24 16:29:04 发布

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

我有一个超过10000个项目的列表,使用递归,我想迭代所有可能的选择组合,从第一个项目开始为其选择和非选择(2个分支),然后为每个分支决定第二个项目,以此类推,直到最后一个项目,以DFS的方式。 我使用这段代码进行优化,大多数分支没有迭代,但至少有1片叶子会到达,以便找到最好的

问题是我用python编写了一个递归代码,在将递归限制更改为10000之后,它可以很好地处理1000个元素,但是无论我增加多少递归限制,我都无法使它适用于10000个元素

我对python还不熟悉,感觉我在代码中犯了一些空间分配错误,它不起作用。请在任何修复或替代方案中帮助我

这是我的递归函数



def rep(i):
    global taken
    global Btaken
    global Tvalue
    global Tweight  
    global Bestimate
    global Bvalue
    global count
    global Mcount   
    count+=1    
    Tweight -= items[i].weight
    if Tweight>=0 :
        taken[items[i].index-1] = 1 
        Tvalue += items[i].value    
        if i < len(items)-1:
            rep(i+1)
        else :
            Btaken=taken*1
            Bvalue = Tvalue     
        Tvalue -= items[i].value                
        taken[items[i].index-1]=0   
    Tweight += items[i].weight      
    Bestimate = best(i+1,Tweight)
    if Bestimate+Tvalue > Bvalue :  
        if i < len(items)-1:
            rep(i+1)
        else :
            Btaken=taken*1
            Bvalue = Tvalue 
    if Mcount<count :
        Mcount=count    
    count-=1

Mcount值现在也正确显示了当前调用(或保持)中的函数数(根据dfs树的高度),那么为什么当我将递归限制增加到15000个以上时,我仍然不能使用它来交互10000个项目,我需要一些关于python内存限制的指导。在


Tags: 项目代码ifcount分支itemsglobaltaken