【问题标题】:How to solve recursion problem in the merge-sort algorithm?如何解决归并排序算法中的递归问题?
【发布时间】:2020-04-06 13:09:40
【问题描述】:

例如,我想通过合并排序对station的属性f进行排序。

class mergesort_algorithm():


 def Merge_Sort(self,stations):

     length = len(stations)
     middle = int(length/2-1)

     if length<=1:
         return stations
     else:
         list1 = self.Merge_Sort(stations[:middle])
         list2 = self.Merge_Sort(stations[middle:])

         return self.Merge(list1,list2)




 def Merge(self,list1,list2):
     list3 = []
     length1 = len(list1)
     length2 = len(list2)
     point1 = 0
     point2 = 0


     while point1<=length1-1 and point2<=length2-1:

         if list1[point1].f<list2[point2].f:
             list3.append(list1[point1])
             point1 += 1

         else:
             list3.append(list2[point2])
             point2 += 1

     if point1>length1:
         for i in range(list2):
             if i>=point2:
                 list3.append(list2[point2])

     if point2>length2:
         for i in range(list1):
             if i>=point1:
                 list3.append(list1[point1])

     for item in list3:
         print(item.name)
     print("-----")
     return list3

当我运行代码对电台列表进行排序时,它会报告错误。

File "/home/surface/Final-Year-Project/FYP/Util/Mergesort_algorithm.py", line 16, in Merge_Sort
    list1 = self.Merge_Sort(stations[:middle])
  File "/home/surface/Final-Year-Project/FYP/Util/Mergesort_algorithm.py", line 17, in Merge_Sort
    list2 = self.Merge_Sort(stations[middle:])
  File "/home/surface/Final-Year-Project/FYP/Util/Mergesort_algorithm.py", line 17, in Merge_Sort
    list2 = self.Merge_Sort(stations[middle:])
  File "/home/surface/Final-Year-Project/FYP/Util/Mergesort_algorithm.py", line 17, in Merge_Sort
    list2 = self.Merge_Sort(stations[middle:])
  [Previous line repeated 989 more times]
  File "/home/surface/Final-Year-Project/FYP/Util/Mergesort_algorithm.py", line 16, in Merge_Sort
    list1 = self.Merge_Sort(stations[:middle])
  File "/home/surface/Final-Year-Project/FYP/Util/Mergesort_algorithm.py", line 11, in Merge_Sort
    middle = int(length/2-1)
RecursionError: maximum recursion depth exceeded while calling a Python object

我不知道如何解决它。似乎有很多递归。我找到了一些解决方案: import syssys.setrecursionlimit(1000000)

【问题讨论】:

  • 你怎么称呼这段代码?
  • 中间应该是middle = len(stations)//2 #Finding the mid of the array 和其他merge sort algorithms一样
  • @mkrieger1 有点复杂,是我项目中的一个函数。

标签: python recursion mergesort


【解决方案1】:

假设len(stations) 为2。那么middle 为0。所以stations[:middle] 为空,但stations[middle:] 的长度为2,并且存在无限递归。

【讨论】:

  • 谢谢!我以前没想过这个案子!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多