python的这段程序该怎么理解,没看懂 5

defperm(list,k,m):ifk==m:foriinrange(m+1):printlist[i]printelse:foriinrange(k,m+1):li... def perm(list,k,m):
if k==m:
for i in range(m+1):
print list[i]
print
else:
for i in range(k,m+1):
list[k],list[i]=list[i],list[k]
perm(list,k+1,m)
list[k],list[i]=list[i],list[k]
mylist=input("input a list([1,2,3...]):")
perm(mylist,0,len(mylist)-1)
展开
 我来答
bdwisyou7d
2012-12-27 · TA获得超过1.3万个赞
知道大有可为答主
回答量:3774
采纳率:81%
帮助的人:1074万
展开全部
倒序显示一个list的后半部分。显示完成后,list保持原状。

这是一个递归调用的一个练习题。

象是玩牌似的。先把首尾交换。然后递归调用里面一层,然后再把首尾换回来。
递归调用直到中间那个数,这里将整个LIST的前半部分(此时是倒序的原来的后半部分)打印出来。

这样的交换策略应用到从1到结尾的每一个输入的序列。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ul0402206
2012-12-27 · TA获得超过505个赞
知道小有建树答主
回答量:301
采纳率:0%
帮助的人:304万
展开全部
输出一个给定list的所有元素的排列组合
你把代码修改下:
def perm(list,k,m):
if k==m:
#for i in range(m+1):
print list[:m+1]
#print
else:
for i in range(k,m+1):
list[k],list[i]=list[i],list[k]
perm(list,k+1,m)
list[k],list[i]=list[i],list[k]
mylist=input("input a list([1,2,3...]):")
perm(mylist,0,len(mylist)-1)

这样看结果就比较清楚了
更多追问追答
追问
还不是很清楚。。。list[k],list[i]=list[i],list[k]调换位子是什么作用,还有当k=m时,打印,但是感觉每次的m都没变
追答
怎么会不变呢?
第一次当你输入list是[0,1]的时候, k=0,m=1,这个时候就交换啊
第二次调用perm的时候k=m就输出交换后的list啊

list[k],list[i]=list[i],list[k]调换位子的目的就是为了能够生成不同的排列组合啊
不换位置哪里来的排列组合?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式