dzdzjz 2018-12-24 16:38 采纳率: 0%
浏览 670

python在递归时使用列表切片【:-1】,回归到上一层时原函数没变,描述的不太清,请看解释,希望有人解惑。

在学回溯法的例子,集合求子集,遇到的问题。下面是代码:
其中加了很多print是为了更好的看程序是怎么一步步运行的。

#-*-coding:utf-8-*-
#求子集
#使用回溯法。对每个数据进行显示或不显示(1or0)的选择
def mybacktrack(a,k,data):
    print "1",a,k
    if is_a_solution(a,k,data):
        process_solution(a,k,data)#得到解
        print "2",a,k
    else:
        print "3",a,k
        k+=1    #搜索深度+1
        for i in range(2):
            print "4",a,k
            a.append(i)
            mybacktrack(a,k,data)   #递归
            print "5",a,k
#           a=a[:-1]    #使用这一句递归后a没有变
            a=a[:k-1]#改成这样就没问题
            print "6",a,k

def is_a_solution(a,k,data):    #判断是否是合理的解
    return len(a)==len(data)
def process_solution(a,k,data):
    print "{",
    for j in range(len(a)):
        if a[j]:
            print data[j],
    print "}"

data=[1,2,3,4]  #集合
k=0 #初始搜索深度
a=[]    #初始搜索根
mybacktrack(a,k,data)
  • 写回答

2条回答 默认 最新

  • 嘉月十九 2020-02-07 22:56
    关注

    切片的时候返回的是一个新的列表,列表改变了,递归出来也就不一样。

    评论

报告相同问题?

悬赏问题

  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?