我用Python編寫了一個快速排序程序,我的目標是計算總的比較結果。我聲明瞭一個名爲thesum
的全局變量。當我在分區功能中使用thesum
時,我可以正確計算出thesum
。但是,當我試圖在遞歸函數中計算總和時,它給出了錯誤的答案。下面是我做過分別爲:Python全局變量不能在遞歸函數中工作
方法1:
計算在分區函數的總和:
def partition(listToSort, start, end):
global thesum
thesum = thesum+end-start
在我使用分區算法中,我需要添加M-1當分割一個m長度的數組時。
方法2:
計算遞歸函數的qsort的總和:
def qsort(listTo, start, end):
if start >= end :
return
else:
index = partition(listTo, start, end)
qsort(listTo, start, index-1)
global thesum
thesum = thesum + index-1-start
qsort(listTo, index+1, end)
thesum = thesum + end-index-1
在該方法中,thesum
沒有被初始化到0
但原始陣列減1
您可能還需要知道的事情:
我正在執行的算法是quicksort的簡單版本。我有一個列表,需要用這個程序進行排序。我使用全局變量來表示算法需要執行的總體比較。
的問題和問題
我認爲這兩種方法是等效的,但他們給了不同的答案。在通過打印thesum
進行了一些測試之後,我發現這個全局變量在函數qsort
中未按預期工作。 例如,當對10個元素的數組進行排序時,thesum
初始化爲9,但後來打印爲8,這很奇怪。 但是爲什麼?我將其聲明爲函數中的全局函數,它的用法與函數partition
中的方法相同。我能想到的所有差異是qsort
是一個遞歸函數。但是,這有什麼不同?所以全局變量不應該用於遞歸函數中?
對於遞歸調用,您最好將作爲參數添加到調用中。這可能不起作用,因爲當你期待它的價值不是你所期望的。 – Jiminion
不應該在同一句子中使用全局和遞歸 –
在第一次調用qsort之前,您不應該更新(在方法#2中)的總數? – Jiminion