2017-07-02 161 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'調用完成完成執行。 –