Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的合并排序-运行时错误:超过最大递归深度_Python_Algorithm_Sorting_Data Structures_Mergesort - Fatal编程技术网

Python中的合并排序-运行时错误:超过最大递归深度

Python中的合并排序-运行时错误:超过最大递归深度,python,algorithm,sorting,data-structures,mergesort,Python,Algorithm,Sorting,Data Structures,Mergesort,我正在Python中进行合并排序 我已经检查了合并功能。阵列正在合并 但是在mergeSort函数中出现错误:--- 运行时错误:超过最大递归深度 运行时错误回溯(最近的调用) 最后)在() 63打印(arr[i]), 64 --->65合并排序(arr,0,n-1) 66字(“”) 67打印(“排序数组为”) 在合并排序中(arr、l、r) 53米=l+(r-1)/2 54合并排序(arr、l、m) --->55合并排序(arr,m+1,r) 56合并(arr、l、m、r) 57 可能的原因是

我正在Python中进行合并排序

我已经检查了
合并
功能。阵列正在合并

但是在
mergeSort
函数中出现错误:---

运行时错误:超过最大递归深度

运行时错误回溯(最近的调用) 最后)在() 63打印(arr[i]), 64 --->65合并排序(arr,0,n-1) 66字(“”) 67打印(“排序数组为”)

在合并排序中(arr、l、r) 53米=l+(r-1)/2 54合并排序(arr、l、m) --->55合并排序(arr,m+1,r) 56合并(arr、l、m、r) 57

可能的原因是什么

def merge(arr,l,m,r):
    n1 = m-l+1
    n2 = r-m

    L = [0] * n1
    R = [0] * n2

    print("First List")
    for i in range(0,n1):
        L[i] = arr[i+l]
        print(L[i]), 


    print("")
    print("Second List")    
    for j in range(0,n2):
        R[j] = arr[j+m+1]
        print(R[j]),



    #Merging the temp arrays
    i = 0
    j = 0
    k = 0
    print("")
    print("Merged List ---------->")

    while i < n1 and j < n2:
        if L[i] <= R[j]:
            arr[k] = L[i]
            print(arr[k]),
            i+=1
        else:
            arr[k] = R[j]
            print(arr[k]),
            j+=1
        k+=1

    while i<n1:
        arr[k] = L[i]
        i+=1
        k+=1

    while j<n2:
        arr[k] = R[j]
        print(arr[k])
        j+=1
        k+=1

def mergeSort(arr,l,r):
    if l<r:
        m = l+(r-1)/2
        mergeSort(arr,l,m)
        mergeSort(arr,m+1,r)
        merge(arr,l,m,r)


arr = [0,12,13,0,1,22]
n = len(arr)

mergeSort(arr,0,n-1)
print(" ")
print("Sorted Array is")
for i in range(0,n-1):
    print(arr[i])
def合并(arr、l、m、r):
n1=m-l+1
n2=r-m
L=[0]*n1
R=[0]*n2
打印(“第一个列表”)
对于范围(0,n1)内的i:
L[i]=arr[i+L]
打印(L[i]),
打印(“”)
打印(“第二份清单”)
对于范围(0,n2)内的j:
R[j]=arr[j+m+1]
印刷品(R[j]),
#合并临时数组
i=0
j=0
k=0
打印(“”)
打印(“合并列表------->”)
当i如果L[i]是因为调用mergesort函数时,传递的是L=0和r=list的长度。
不管你的计算结果是什么,在任何情况下,你的l都会小于r

 m = l+(r-1)/2

这是因为在调用mergesort函数时,传递的是列表的l=0和r=length。 不管你的计算结果是什么,在任何情况下,你的l都会小于r

 m = l+(r-1)/2

mergeSort
中计算
m
的方法是错误的(您需要将整个表达式分成一半,而不仅仅是
(r-1)
)。将其更改为:

m = (l+(r-1))/2

当您错误地计算时,您的方法一次又一次地递归调用自己,直到超过最大方法堆栈深度,从而崩溃

mergeSort
中计算
m
的方法是错误的(您需要将整个表达式分成一半,而不仅仅是
(r-1)
)。将其更改为:

m = (l+(r-1))/2
当您错误地计算时,您的方法一次又一次地递归调用自己,直到超过最大方法堆栈深度,从而崩溃

  • 你犯了一个基本的错误。Python是动态类型语言
  • 在讨论为什么会出现运行时递归错误之前,您需要做一个更改。
    而不是
    m=l+(r-1)/2
    write
    m=(l+r)/2

    因为当您调用
    mergeSort(arr,0,n-1)
    时,
    n-1
    是最后一个索引值,这就是为什么
    m=l+(r-1)/2中不需要
    r-1
楼层分区操作员(//)与普通分区操作员(/) 现在来谈谈你为什么会得到递归错误的要点,答案如下

  • 当你像这样做手术的时候
m=(l+r)/2

除法运算将给出分数部分,即
m
将被视为浮动变量
因此,
m
永远不会是0它将是任何浮点数,表示0.1232.1221.0025

因为浮点as
m
永远不会0如果条件
if l
  • 你犯了一个基本的错误。Python是动态类型语言
  • 在讨论为什么会出现运行时递归错误之前,您需要做一个更改。
    而不是
    m=l+(r-1)/2
    write
    m=(l+r)/2

    因为当您调用
    mergeSort(arr,0,n-1)
    时,
    n-1
    是最后一个索引值,这就是为什么
    m=l+(r-1)/2中不需要
    r-1
楼层分区操作员(//)与普通分区操作员(/) 现在来谈谈你为什么会得到递归错误的要点,答案如下

  • 当你像这样做手术的时候
m=(l+r)/2

除法运算将给出分数部分,即
m
将被视为浮动变量
因此,
m
永远不会是0它将是任何浮点数,表示0.1232.1221.0025

因为浮点as
m
永远不会0if条件
if l