python内存不足递归_python递归内存不足

要查看内存错误,请运行limit=100的代码,然后打印出chain。在

也许你想序列化递归代码:lengths = {1: 1}

def collatz(i):

i0 = i

acc = 0

while True:

if i in lengths:

lengths[i0] = acc + lengths[i]

return acc + lengths[i]

acc += 1

i = (i * 3 + 1) if i % 2 else i // 2

longest = 1

for i in range(1, 1000000):

c = collatz(i)

if c > longest:

longest = c

print(i, c)

当然,这仍然可以在许多方面进行优化,但它在4秒钟内就产生了预期的结果。在

编辑:

您的方法创建了一个列表,其长度为有史以来最高的术语。对于limit=100,这是9232。这不算多。但是对于limit=1000000,它是56991483520(从704511开始的链),这是一个相当大的庞然大物。如果它只是int32上的一个数组,那么它已经有212GB的内存,而实际上它还不止这些。在

这里这里的麻烦链条有:704511、21113534、1056767、3170302、15851151、4755454、2377727、7133182、3566591、10699774、5349887、16049887、16049662、8024831、24074494、1203724247、36111742、18055742、18055871、541676154167614、27083807、812551422、406257711、121877134、60938567、1828157702、91407851、27223223554、1371117777、4113135332、12366666、10283388338666、102838387871、54167616154407851、2742747111711171117733308501500,154250750,123532095、52056286、26029814314314378787826020298143787878784478784430390443939044727251111341341346358567070823117570124708785856235、263551876706、1317759353、395327353953278060、197663639030、988319519515、2964958585462964958546、14824479273、444747437820 4447437820、22223718910、1111851859455、333557836366、67787891838363636778789183、50033676767789183、5003367675755025016168377575757575757575757575757575757575757575757525256631257576990,5628788495、1688636365486、8443182747425295295482301266477774115、37994322346464618997161173等,18997161173,56991483520,2849574176014247478708888087123393544035356161967720、1780978178098386089890491930、44524545965、13355737896、66786868948、33393444474、16696767237、16696723237、50090171250450856、1252252255428、62616127156317131306357、9391919072727317873939393934444741669672374166967237、166967237 46959536、23479768、11739884、5869942,2934971、88094914、4402452452457113207372、6603686、3301843、99055530、4952765、1485829296、742914834371457474741457418572871857287、5571865571862、2785931、8357794、4178897、125366912562626268346、3134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343473232350235023502350235050235023502350235023502350235063733550292929296767552231266111156333346901673450,836725、2510176、2510176、1255088、627544、313772、156886、78443、235330、1176665、3529996 3529996、176498、88249、2674748、1323742132374、661876618766187198562、99281、2978444447148922、7446747446223223223384、111692、55846、279223、83770、279223、8377770、279223、83770、4185、125656、62828、125656、62828、31414、1574157747122、23561、70684、35343434342、17671、53014、26507、26507、7952522、39762845964229821 89464473223661118333550,16775、5032526、25632563754949497437745、1132362365656618、2839849284928、42464246424642424242424242424242424242232、21232、10616、5305308、2652652651321321321327、3982、1991、5974、2987 2987、8962、4481、13444、6722、3361 3361、10084、5042、2522521、7564、3782、1891、567474741891、5674、2837、8512、4256、2128、1064、5328、1064、532、266266266133、400、400、200、100、50、25、76、38、38、19、58、58、29、88、44、44、22、22、11 17,52,26,13,40,20,10,5,16,8,4,2,1

使用您精确的递归思想,但使用dict(稀疏)而不是list(运行时没有问题):

^{pr2}$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值