错误:未定义名称 - 类中的递归函数

时间:2017-11-15 19:09:04

标签: python mergesort

我还在学习Python,而且我收到的大多数错误在这一点都是语法上的,虽然我现在收到的错误是

  

NameError:名称'mergeSort'未定义

我似乎无法理解为什么当在类外部调用时,该方法可行,但是一旦我将它包含在类中,函数就会中断。

class MergeStringList(list):

    def add(self, item):
        self.append(item)

    def mergeSort(self):
        print("Splitting ",self)
        if len(self)>1:
            mid = len(self)//2
            lefthalf = self[:mid]
            righthalf = self[mid:]

            mergeSort(lefthalf)
            mergeSort(righthalf)

            i=0
            j=0
            k=0

            while i < len(lefthalf) and j < len(righthalf):
                if lefthalf[i] < righthalf[j]:
                    self[k]=lefthalf[i]
                    i=i+1
                else:
                    self[k]=righthalf[j]
                    j=j+1
                    k=k+1

            while i < len(lefthalf):
                self[k]=lefthalf[i]
                i=i+1
                k=k+1

            while j < len(righthalf):
                self[k]=righthalf[j]
                j=j+1
                k=k+1
        print("Merging ",self)

    def printList(self):
        print(self)

mergeList = MergeStringList()
mergeList.add("stitch")
mergeList.add("daily")
mergeList.add("blade")
mergeList.printList()
mergeList.mergeSort()
mergeList.printList()

1 个答案:

答案 0 :(得分:0)

递归调用要求在对象上调用,即self.mergeSort。改变这两行:

mergeSort(lefthalf) mergeSort(righthalf)

更新:

为了使代码能够运行,你也应该更改方法签名,因为它现在不接受参数。也就是说,

def mergeSort(self, input)