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