Python全局变量不适用于递归函数

时间:2013-07-22 16:26:36

标签: python global-variables quicksort

我用Python编写了一个quicksort程序,我的目标是计算使用的总比较。我声明了一个名为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,这很奇怪。 但为什么?我在函数中声明它是全局的,它的使用方式与函数partition相同。我能想到的所有区别是qsort是一个递归函数。但这有什么不同呢?那么全局变量不应该用于递归函数吗?

1 个答案:

答案 0 :(得分:0)

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