Python全局变量在递归函数中不起作用

Python全局变量在递归函数中不起作用,python,global-variables,quicksort,Python,Global Variables,Quicksort,我用Python编写了一个快速排序程序,我的目标是计算使用的总比较。我声明了一个名为thesum的全局变量。当我在配分函数中使用thesum时,我可以正确地计算thesum。然而,当我试图在递归函数中计算和时,它给出了错误的答案。以下是我分别做的: 方法1: 计算配分函数中的和: def partition(listToSort, start, end):

我用Python编写了一个快速排序程序,我的目标是计算使用的总比较。我声明了一个名为
thesum
的全局变量。当我在配分函数中使用
thesum
时,我可以正确地计算
thesum
。然而,当我试图在递归函数中计算和时,它给出了错误的答案。以下是我分别做的:

方法1:

计算配分函数中的和:

def partition(listToSort, start, end):                                                                                                                 
    global thesum          
    thesum = thesum+end-start          
在我使用的分区算法中,我需要在对m长度数组进行分区时添加m-1

方法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,这很奇怪。
但是为什么呢?我在函数中将它声明为全局的,并且它的使用方式与在函数
分区中的使用方式相同。我所能想到的所有区别是,
qsort
是一个递归函数。但这又有什么区别呢?因此,不应该在递归函数中使用全局变量?

这两种方法没有执行等效的操作。

对于递归调用,最好将sum作为参数添加到调用中。它可能不起作用,因为当您期望值时,该值不是您期望的值。全局和递归不应在同一句中使用。您是否应该在第一次调用qsort之前更新SUM(在方法#2中)?