python的递归为什么难理解_python 进行递归的时候出现了一个不能理解的 bug,求各路大神解惑...

是一道24点的问题,出现了一个很诡异的现象,为了不影响逻辑,把其他的操作删掉了,可以简单地把这个看做一个对数组中的数据进行任意两个数字的相乘的操作。

逻辑:对输入的列表进行任意组合的弹出两个数字,对这两个数字进行相乘的操作,然后再将乘积加入到列表中进行递归操作。

目前遇到的问题:

会出现 pop index out of range的情况,但是我在代码里面已经加了限制条件,按理说列表长度为1的是不会循环两次的,

加了打印之后发现:最后一句 print(j,tlist,len(tlist))会出现:1 [6] 1 然后报错pop index out of range,在twentyfour(mul)后打印print('a4') print('a5'),发现这俩在一次循环中会执行两次

实在费解,希望大神能来帮我解答一下这个问题

代码

import copy

def twentyfour(alist):

if len(alist)<2:

if alist[0]==24:

print("yes")

else:

print("no")

else:

for i in range(len(alist)):

tlist=copy.deepcopy(alist)

first=tlist.pop(i)

print(len(tlist))

print('a1')

for j in range(len(tlist)):

print('a2')

print(j,tlist,len(tlist))

second=tlist.pop(j)

mul=copy.deepcopy(tlist)

mul.append(first*second)

print('a3')

twentyfour(mul)

print('a4')

print('a5')

def func():

_input=input().split()

a=[]

for i in range(len(_input)):

if _input[i]=="A":

a.append(1)

elif _input[i]=="J":

a.append(11)

elif _input[i]=="Q":

a.append(12)

elif _input[i]=="K":

a.append(13)

else:

a.append(int(_input[i]))

twentyfour(a)

if __name__ == "__main__":

func()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值