Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

177
Visualizações
Cómo resolver este problema de recursión de Javascript para encontrar el número de ocurrencias de letras en una matriz

Sé que hay algún problema con la declaración de devolución, pero no puedo averiguar qué.

 let arr = ['a', 'b', 'c', 'a'] let size = arr.length - 1 let counter = 0 function findOcc(arr, size, x) { if (size === 0) { return counter } else { if (arr[size] === x) return counter++ findOcc(arr, size - 1, 'a') } } console.log(findOcc(arr, size, "a"))

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Una versión recursiva más simple utiliza la desestructuración de la matriz para comparar el primer valor con el valor de destino, agregando uno si coincide y cero si no lo hace, y luego se repite en el resto de la matriz. Nos detenemos cuando el valor no está definido, lo que significa que nos hemos quedado sin elementos en la matriz.

 const countOcc = (target) => ([x, ...xs]) => x == undefined ? 0 : (x == target ? 1 : 0) + countOcc (target) (xs) const arr = ['a', 'b', 'c', 'a'] console .log (countOcc ('a') (arr)) console .log (countOcc ('b') (arr)) console .log (countOcc ('c') (arr)) console .log (countOcc ('d') (arr))

Si bien podríamos modificar esto para que sea recursivo en la cola, los motores JS actuales aún no optimizan las llamadas en la cola, por lo que parece un poco inútil. Si fuera a hacer esto en arreglos grandes, probablemente necesitaría reescribir con iteración en lugar de recursividad.

about 4 years ago · Juan Pablo Isaza Relatório

0

Parece que entendiste la lógica en tu cabeza, pero no la implementaste bien.

  • Entonces, para la condición base, dice if (size===0) devuelve el contador. Esto significa que solo devuelve el contador, pero arr[0] es una verificación válida. Entonces, lo que realmente quiere cuando está verificando elementos es arr[size-1] en la siguiente línea, es decir, más

  • Para la condición else, tenía la intención de incrementar el contador, lo cual es correcto, pero no debe regresar. En su lugar, devuelve el valor de la próxima llamada con tamaño-1

  • También su declaración de tamaño debe ser let size = arr.length

  • Además, el último argumento debe ser x y no a dentro de la llamada recursiva.

Con eso el código es:

 let arr = ['a', 'b', 'c', 'a'] let size = arr.length let counter = 0 function findOcc(arr,size,x) { if (size === 0) return counter if(arr[size-1]===x) ++counter return findOcc(arr,size-1,x) } console.log(findOcc(arr, size, "a"))

about 4 years ago · Juan Pablo Isaza Relatório

0

Si uno está de acuerdo con mutar la matriz original, entonces la función se puede simplificar como se muestra a continuación:

 const origArr = ['a', 'b', 'c', 'a']; // a simpler implementation of the same recursive function function findOcc(arr, x) { return ( arr.length // if "arr" length is 1 or more ? arr.pop() === x // ".pop()" the last elt & compare with "x" ? 1 + findOcc(arr, x) // add 1 & recurse using the shorted/mutated "arr" : findOcc(arr, x) // do not add 1, but recurse using the mutate "arr" : 0 // no more elements in "arr", so return 0 ) } // using "..." spread to avoid "arr" from being changed console.log('number of times "a" occurs is: ', findOcc([...origArr], "a")) console.log( `"d" occurs in ["${origArr.join('", "')}"] ${findOcc([...origArr], "d")} times...` )

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda