2017-07-02 163 views
0

这个程序使用插入排序递归排序列表... 有人可以让我明白'isort'是如何递归工作的,以及即使'isort'递归后'insert'如何运行,isort递归直到它已经完成了一次?python递归函数深度

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 
+0

不确定是否t他解释它,但相关:https://www.youtube.com/watch?v=ROALU379l3U –

+0

嗯,这段代码确实是插入排序,但分配操作不必要地交换。 –

+0

是它的不必要的,它只是一个递归的例子 –

回答

0

看看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

+0

正确我明白,它从头到尾排序列表,但我不明白的是'插入'函数即使当'isort'递归地减少k为0或1 if条件没有被满足,并且抱歉在编程中是一个新手,所以很愚蠢 –

+0

我认为问题在于你不理解python语法:在if后面的两行是if,因为它们是缩进的。所以每次都运行 – Dotan

+0

OK我最后一个问题,所以当if条件满足时,它首先调用'isort',然后'插入'或者它们一起调用。根据我的理解,插入将不会运行,除非递归'isort'调用完成完成执行。 –