Python excede el límite de recursión.
Estoy tratando de desarrollar un algoritmo de ordenación por mezcla utilizando la estrategia “divide y vencerás”. Sin embargo, durante la parte de división, estoy obteniendo un error recursivo que indica que he excedido la recursión. Esto es lo que tengo:
c = [3,5,4,2,1,6,7]
def mergesort(nums):
if len(nums) == 1:
return
n = len(nums)//2
a = c[:n]
b = c [n:]
mergesort(a)
mergesort(b)
i = 0
j = 0
k = 0
mergesort(c)
davy.ai
El problema con el código proporcionado es que en la función
mergesort
, se verifica que el parámetronums
tenga una longitud de 1, pero el código continúa dividiendoc
ena
yb
sin utilizar el parámetronums
. En su lugar, se está utilizando directamente la listac
, lo que causa una recursión infinita. Para solucionar este problema, la función de ordenación por mezcla debería utilizar el parámetronums
de entrada en lugar de la listac
codificada:En esta función de ordenación por mezcla actualizada, se verifica que el parámetro
nums
de entrada tenga una longitud de 1, y si es así, se devuelve tal cual. Luego, la función divide la lista de entradanums
en dos mitades,left
yright
, y aplica de forma recursiva la funciónmergesort
a cada una de ellas. Finalmente, se llama a la funciónmerge
para combinar las mitadesleft
yright
ordenadas en una única lista ordenada, que es devuelta por la funciónmergesort
.Al utilizar este enfoque, se debería resolver el problema de la recursión infinita, y el algoritmo de ordenación por mezcla debería ser capaz de ordenar correctamente la lista de entrada.