2017-05-30 81 views
-3

錯誤的版本:如何遞歸返回

def mergeSort(s): 
    if(len(s)<=1): 
     return s 
    else: 
     mid=len(s)/2 
     front=s[:mid] 
     back=s[mid:] 
     mergeSort(front)  
     mergeSort(back) 
     return merge(front,back) 

正確的版本:

def mergeSort(s): 
    if(len(s)<=1): 
     return s 
    else: 
     mid=len(s)/2 
     front=mergeSort(s[:mid]) 
     back=mergeSort(s[mid:])   
     return merge(front,back) 

爲什麼錯版返回原籍陣列什麼在遞歸過程中的兩個版本之間的區別? 在快速排序相同的困惑,請幫助我改進代碼,謝謝。並解釋我應該怎麼做與遞歸返回,如果我想要返回數據後處理不返回原始數據。

def QuickSort(seq): 
    if(len(seq)<=0):   
     return seq 
    else: 
     j=partion(seq) 
     left=QuickSort(seq[:j])   
     right=QuickSort(seq[j+1:]) 
+0

答案被張貼等功能,但你應該擡頭該怎麼寫有一個更清潔的方式比這個。 – Pythonista

+0

看到這個可愛的[debug](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)博客尋求幫助。 如果沒有別的,插入一些策略性的'print'語句來跟蹤數據和控制流。不要只是盯着代碼:讓它報告每個點的做法。 – Prune

回答

0

不必返回原始數據,它被遞歸修改,當你只是「看法」,你只能看到該進程的第一個和最後一個迭代。

你的第一個版本是錯誤的,因爲你從來沒有「捕獲」,然後返回合併數組

遞歸返回無異於

+0

謝謝,如果我不想更改分配功能,應該在QuickSort中更改哪些內容? –

+0

我想說你最初的問題只是關於遞歸和合並排序,請將你的帖子限制爲單數問題,並在單獨的函數中具體詢問QuickSort。另外,由於我看不到你的分區函數,我甚至不能說那個代碼有什麼問題 –

+0

謝謝,這是我第一次在stackoverflow中提問,我沒有清楚地描述,我也不知道我怎麼能感謝你回答我。 –