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太长了不好贴出来>
对了,今日份的表情包> <