我正在使用Python进行合并排序。
我已经勾选了< code >合并功能。阵列融合得很好。
但在mergeSort
函数中,将出现错误:---
RuntimeError:超过最大递归深度。
运行时错误回溯(最近一次调用)在 () 63 打印(arr[i]), 64 ---
在合并排序(arr,l,r)53 m=l(r-1)/2 54合并排序(ar,l,m)---
可能的原因是什么?
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])
这是因为当您调用合并排序函数时,您传递的是 l = 0 和 r= 列表长度。无论你在每种情况下的计算结果如何,你 l 都将小于 r。
m = l+(r-1)/2
现在来的主要问题,为什么你得到的是,这就是答案。
m=(l r)/2
除法运算将给出小数部分,即 m 将被视为浮动变量,
因此 m
永远不会为 0,它将是任何浮点数,例如 0.123 或 2.122 或 1.0025
由于浮点数为 m
永远不会为 0,if 条件如果 l
您希望m为整数,而不是浮点,因此不要使用m=(l r)/2
写 m=(l r)//2 地板除法运算符 (//) 会给你整数值,你的 mergeSort() 函数不会进入无限循环
这次您的代码将在没有任何错误的情况下执行,只需进行一次更改m=(l r)//2
但是但是但是你的合并()函数算法不好,它没有给出排序数组,数据丢失,其他东西被打印出来
在 mergeSort
中计算 m
的方式是错误的(你需要将整个表达式的一半除以,而不仅仅是 (r-1)
)。将其更改为:
m = (l+(r-1))/2
当您计算错误时,您的方法一次又一次地递归调用自己,直到超过最大方法堆栈深度,从而崩溃。
问题内容: 我使用以下代码解决了Euler项目的问题10,该代码通过强力工作: 这三个功能的工作方式如下: isPrime 检查数字是否为质数; primeList 返回一个列表,其中包含一组在一定范围内且限制为“ n”的素数,并且; sumPrimes 对列表中所有数字的值求和。(不需要最后一个功能,但是我喜欢它的清晰度,特别是对于像我这样的初学者。) 然后,我编写了一个新函数 primeLis
周一开始用Python编程。我喜欢学习它。但是当在tkinter菜单之间切换时,我一直试图理解如何避免递归。我确信这是一个非常基本的问题,我很感激你能容忍我在这个问题上的无知,但是我在别处找不到答案。 我现在所做的是,最终给了我一个错误:RuntimeError:调用Python对象时超出了最大递归深度 这是我目前使用的模式。更新:下面的代码现在是一个完整的、独立的副本,重现了我面临的问题!:D
这是我的代码。打印map_appliance_info(df_appliance)时,我收到错误- 文件"E:/iisc/code/try.py",第69行,map_appliance_infodf_appliance_mapped=map_appliance_info(df_appliance) 文件“E:/iisc/code/try.py”,第35行,map_appliance_info中的i
我对Python很陌生。我写了一个关于返回 x 在排序的重复元素数组 A 中的出现次数的函数: 错误是:运行时错误:超出最大递归深度。有人知道如何解决它吗?
我不明白为什么我会得到这个最大深度错误。iam试图使用bst递归方法在数组中查找数字索引,下面是我的代码 任何人都可以告诉我代码块中发生了什么 错误块: PS C:\Users\admin\Desktop\DSA
问题内容: 我从星期一开始使用Python进行编程。我很喜欢学习它。但是我一直试图了解如何在tkinter菜单之间切换时避免递归!我确信这是一个非常基本的问题,感谢您宽容我对此主题的无知,但我无法在其他地方找到答案。 我现在正在做的最终是给我错误:RuntimeError:调用Python对象时超出了最大递归深度 这是我目前正在使用的模式。更新:下面的代码现在是完整的隔离副本,再现了我面临的问题!