Me dieron la siguiente función en pseudocódigo y estoy tratando de traducirla a JS, pero sigo obteniendo un bucle infinito.
Gracias zord, mid solucionó el problema de recursividad. Ahora me sale la suma equivocada, ¿alguna sugerencia?
¿Qué estoy haciendo mal?
function SUM(arr, left, right){ if(left > right){ return 0 } else if(left == right){ return arr[left] } mid = Math.floor((left + right) / 2); lsum = SUM(arr,left,mid); rsum = SUM(arr,mid+1,right); return lsum + rsum } arr = [1,2,3,4,5] left = 0; right = arr.length - 1; console.log(SUM(arr, left, right));¡Gracias!
mid debe estar a medio camino entre left y right :
mid = Math.floor((left + right) / 2);Además, debe hacer que su bloque de variables tenga un alcance como se menciona en VLAZ. De lo contrario, serán globales y se sobrescribirán con diferentes ejecuciones de la función.
const mid = Math.floor((left + right) / 2); const lsum = SUM(arr, left, mid); const rsum = SUM(arr, mid + 1, right);