craiiz
V2EX  ›  问与答

关于递归

  •  
  •   craiiz · May 15, 2020 · 2143 views
    This topic created in 2194 days ago, the information mentioned may be changed or developed.

    迫于最近不小心看到了《算法图解》,遂开始学习排序;当试到快排时,有个问题让人很疑惑: 最初版本: Jietu20200515-105926.jpg 这里当递归出口条件为 数组长度等于 1 时,会报错; 修改后的版本: Jietu20200515-110223.jpg 将出口条件修改为数组长度<2 时,就能正常运行

    问题: len(array)<2 和 len(array) == 1 这两句话不是等价的么?????

    14 replies    2020-05-15 11:31:26 +08:00
    chairuosen
        1
    chairuosen  
       May 15, 2020
    也可能是 0 啊
    shintendo
        2
    shintendo  
       May 15, 2020
    等于 1 和小于 2 怎么会是等价的??
    craiiz
        3
    craiiz  
    OP
       May 15, 2020
    @chairuosen 关键是无论哪种写法,它都到不了 0 啊。给的数据长度都是大于 2 的,每次递归拆分列表的时候,如果长度要到 0,一定要先变 1 。

    也可能是我没想明白。
    gwy15
        4
    gwy15  
       May 15, 2020
    怎么就到不了 0 了,
    qs([1,0]) -> pivot=1, greater = [], smaller = [0]
    qs([]) -> boom
    craiiz
        5
    craiiz  
    OP
       May 15, 2020
    @shintendo 我是这么想的:列表长度不可能小于 0 吧? 可能是 0,但要变为 0,肯定会先变成 1 。既然两种情况(被排序的列表不停地被拆分)都必然会经过 len(array) == 1 的情况,那么在这限定条件下,这两种写法就是等价的。
    rabbbit
        6
    rabbbit  
       May 15, 2020
    例如 1 2 3 4 5 6

    此时 base_line 为 1
    greaters 为 [2, 3, 4, 5, 6]
    smallers 为 []
    所以报错了
    craiiz
        7
    craiiz  
    OP
       May 15, 2020
    @gwy15 boom 。明白了,感谢。
    craiiz
        8
    craiiz  
    OP
       May 15, 2020
    @rabbbit 明白了,感谢。
    craiiz
        9
    craiiz  
    OP
       May 15, 2020
    此题终结
    chairuosen
        10
    chairuosen  
       May 15, 2020
    另外:遇到自己想不明白的问题,每一行结果都打日志看呀,又不是黑盒
    yuruizhe
        11
    yuruizhe  
       May 15, 2020
    @craiiz 当 pivot 是最小值,smallers 是一个空数组,继续对 smallers 调用 sort(),就会无限递归下去;反之,当 pivot 是最大值,greaters 是一个空数组,继续对 greater 调用 sort(),也会无限递归下去,用例:[1,6,5,4,3,2,]
    craiiz
        12
    craiiz  
    OP
       May 15, 2020
    @chairuosen 了解,我用 IDE 好了,现在想着学习就只用终端加记事本了。
    craiiz
        13
    craiiz  
    OP
       May 15, 2020
    @yuruizhe 明白了,谢谢大神
    crella
        14
    crella  
       May 15, 2020
    我看其他人写的 py 脚本,一般不都是把 import 语句放在文件开头的吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5972 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 03:25 · PVG 11:25 · LAX 20:25 · JFK 23:25
    ♥ Do have faith in what you're doing.