【问题标题】:python recursion function depthpython递归函数深度
【发布时间】:2017-12-05 18:44:35
【问题描述】:

该程序使用插入排序对列表进行递归排序... 有人可以让我理解“isort”如何递归工作以及“插入”如何在“isort”递归之后运行,isort 递归是否暂停直到它完全运行一次?

def insertion(seq):
  isort(seq,len(seq))

def isort(seq,k):
  if k>1:
    isort(seq,k-1)
    insert(seq,k-1)

def insert(seq,k):
  pos=k
  while pos>0 and seq[pos]<seq[pos-1]:
    (seq[pos],seq[pos-1])=(seq[pos-1],seq[pos])
    pos=pos-1   

【问题讨论】:

  • 不确定这是否解释了它,但相关:youtube.com/watch?v=ROalU379l3U
  • 嗯,这段代码确实是插入排序,但是赋值操作被swap代替了。
  • 是的,没必要,它只是一个递归示例

标签: python sorting recursion


【解决方案1】:

看看isort(seq, k)

该函数确保最后 k 个元素已排序

def isort(seq,k):
  if k>1:
    isort(seq,k-1)  
    // seq[k-1:] is sorted

    insert(seq,k-1)
    // the k'th item is now inserted in the correct place,
    // so seq[k:] is sorted

对于k=len(seq)seq[k:] 被简单排序(它是一个空列表) 并且递归在每一步中将k减1,将seq从尾到头排序

【讨论】:

  • 正确我知道它从尾到头对列表进行排序,但我无法理解的是,即使“isort”递归地将 k 减少到 0 或 1 以及 if 条件,如何调用“插入”函数没遇到过,对不起,我是编程新手,太笨了
  • 我认为问题在于你不懂python语法:if后面的两行在if里面,因为它们是缩进的。所以每次都运行
  • 好的,请耐心等待最后一个问题,所以当满足 if 条件时,它首先调用 'isort' 然后 'insert' 或者它们被一起调用。据我了解,除非递归“isort”调用完全执行完毕,否则插入不会运行。
  • 他们一个接一个地被调用。它看起来像 isort {isort {isort .... {isort insert} insert} insert}。 ... }插入
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2017-05-09
  • 1970-01-01
  • 2011-01-24
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多