2013-07-22 78 views
0

我用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是一个递归函数。但是,这有什么不同?所以全局变量不应该用于递归函数中?

+1

对于递归调用,您最好将作为参数添加到调用中。这可能不起作用,因为当你期待它的价值不是你所期望的。 – Jiminion

+2

不应该在同一句子中使用全局和递归 –

+0

在第一次调用qsort之前,您不应该更新(在方法#2中)的总数? – Jiminion

回答

0

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