python递归排序组合_Python进阶之递归(三)排列

1

大家好,我是一只初入编程坑的生物狗。在学习python的过程中整理了一下自己的资料分享给大家,同是小白的朋友们可以拿来练习,提升自信(如果我这只笨笨的生物狗都可以编代码的话你萌也木问题的!)肯定有很多不足的地方,也麻烦大家指出好帮助我进步!

今天来看用recursion解决排列问题!(高中数学课讲排列的时候我可没那么兴奋过>" />"Beautiful!""Amazing!""Elegant!"---my professor

i, lo, hi 三个参数是不是把你搞晕了(我当时是被搞晕了)a是给定的list,每次print出的是不同种排列的a。lo是我们的第一个指针,它从指向list[0]到list[1]...一个个向后挪一直到list的末尾list[hi-1],所以lo==hi时为一个recursion循环的结束。lo每往后挪一个,我们便可以选定一个对应的值,而i这个指针则是负责再选定一个值,与lo选定的值位置对调(这两个值可以重合,所以位置就不变啦)。随着lo的移动,前面的值就被固定了下来。

当然和组合的code一样,如果你在base condition那里return a的话,只能得到若干情况中的一种情况。如果你不想直接print out 这个function的结果,可以把所有这些情况存储在一个新的list中,但是这里一定要注意list的可变性!(list is mutable!) 在下面的练习中请注意到细节。

练习一:一个秘书写信给A,B,C,D,又准备了四个信封标着A,B,C,D各自的地址。 然而奇葩的是,她要把四封信放进信封里,但是不想把他们放进对应的信封里。请列出所有排列:

练习二:书架上有6本书: War and Peace by Leo Tolstoy - Anna Karenina by Leo Tolstoy- Magic Mountain by Thomas Mann- Death in Venice by Thomas Mann- Arms and the Man by Bernard Shaw - Candida by Bernard Shaw。我把他们随便排列但要求相同作者的书一定要放在一起,请列出所有的排列:

我的思路是先按照作者(及一个有三个值的list)排列(第一个recursion),再把作者换成对应的书本(有一个recursion)自己写的code,可能很笨拙,还望多指教

和combination一样,有的时候list很大,不可能把所有排列的可能性都列出来再筛选,这就要求我们在排列的function里面就加上限制条件。请看下面这道题:

练习三:1-16组成的4X4 magic square(即每列每行对角线的和都相等-34)请print 出所有可能的square:

这里卖个关子,我的code太长了不好贴出来>

对了,今日份的表情包> <

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值