Tengo una tarea en la que necesito encontrar el número más pequeño en una matriz usando una función recursiva . Para ser claros: me han proporcionado una solución de trabajo. Por mi vida, no puedo entender por qué mi propio algoritmo no funciona.
function minimum(ns) { if (ns.length === 1) { return ns[0]; } else { const first = ns[0] const second = ns[1] if (first >= second) { return minimum(ns.slice(1)) } else { return minimum(ns.splice(1,1)) } } } minimum([0, 1]Este código devuelve 1 en lugar de cero... Mi forma de pensar es la siguiente:
¿Por qué esto devuelve 1 en lugar de 0?
Espero que alguien pueda ayudar Saludos cordiales!
En lugar de Array.slice() y Array.splice , puede usar la asignación de desestructuración :
function minimum(ns) { if (ns.length === 1) { return ns[0]; } const [first, second, ...tail] = ns; if (first >= second) { return minimum([second, ...tail]); } else { return minimum([first, ...tail]); } }o
function minimum(ns) { if (ns.length === 1) return ns[0]; const [first, second, ...tail] = ns; return minimum([(first >= second?second:first), ...tail]); } console.log(minimum([1])); console.log(minimum([3,1,2])); console.log(minimum([3,2,2,3,4]));Debe empalmar fuera de la llamada, porque Array#splice devuelve el elemento eliminado de la matriz.
function minimum(ns) { if (ns.length === 1) return ns[0]; const first = ns[0] const second = ns[1] if (first >= second) return minimum(ns.slice(1)); ns.splice(1, 1); return minimum(ns); } console.log(minimum([0, 1])); console.log(minimum([1, 0])); console.log(minimum([5, 6, 3, 4, 7, 2, 1]));Mabe otro enfoque ayudaría mejor al separar el primer elemento y tomar el resto de la matriz.
function minimum([first, ...ns]) { if (ns.length === 0) return first; if (first >= ns[0]) return minimum(ns); return minimum([first, ...ns.slice(1)]); } console.log(minimum([0, 1])); console.log(minimum([1, 0])); console.log(minimum([5, 6, 3, 4, 7, 2, 1]));