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

362
Visualizações
¿Por qué el contador aumenta y se llama fn? ¿Cómo funciona?

Resolví kata en codewars. De hecho, hice esto por accidente y no entiendo por qué funciona este código. ¿Puedes explicarlo?

Cata:

Escribe una función, persistencia, que tome un parámetro positivo num y devuelva su persistencia multiplicativa, que es el número de veces que debes multiplicar los dígitos en num hasta llegar a un solo dígito.

39 --> 3 (porque 3 9 = 27, 2 7 = 14, 1*4 = 4 y 4 tiene un solo dígito)

Mi solución:

 function persistence(num) { let count = 0; const arr = [...num.toString()]; const sumArr = arr.reduce((res, val) => (res *= val)); if (arr.length > 1) { **// Why? How this line works? // Why it doesn't crashes? // Why it returns correct counter value and calls the function?** count += 1 + persistence(sumArr) } return count; } persistence(39); //3

Por que si me gusta esto, el contador no guarda el resultado:

 if (arr.length > 1) { count += 1 persistence(sumArr) }
about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Básicamente, la función de persistence(sumArr) actúa como una función recursiva y devuelve el recuento de 0 para una condición base que es cuando el número es de un solo dígito.
Para 39, el conteo es 1+persistence(27)
Para 27, el conteo es 1+persistence(14)
y para 14, 1+ persistence (4) que no es más que 1+0 y recursivamente suma 3

about 4 years ago · Juan Pablo Isaza Relatório

0

count es una variable local, solo accesible dentro del alcance de persistence() , por lo que cuando hace un bucle recursivo, crea una nueva variable llamada count pero está en un nuevo alcance, el método que llamó, simplemente tiene el mismo nombre que persistence() .

Sería totalmente diferente si count fuera una variable global, fuera del alcance del método.

 let count = 0; function persistence(num) { ... }

Llamar a persistence() nuevamente dentro de persistence() usaría la misma variable, no una nueva.

about 4 years ago · Juan Pablo Isaza Relatório

0

¡Esto es recursión!

Cada vez que la persona que llama llama a una función, esa función (también conocida como destinatario) se inserta en la pila de llamadas. Todos los argumentos, las variables locales necesarias para esa función están presentes allí. Esto también se conoce como marco de pila. El destinatario de la llamada se saca de la pila cuando vuelve a la persona que llama.

En su caso, tanto la persona que llama como la persona que llama tienen la misma función. Esto se llama recursividad. Durante la recursividad, las variables locales de esa función no se comparten. Se configura un nuevo marco de pila para cada destinatario.

 if (arr.length > 1) { count += 1 persistence(sumArr) }

Aquí, el conteo que está devolviendo el destinatario de la llamada no se suma con el conteo de la persona que llama.

Si visualizamos lo que está pasando entonces:

 persistence(37) = 1 + persistence(27) = 1 + 1 + 1 + 0 // [putting value returned from persistence(27)] persistence(27) = 1 + persistence(14) = 1 + 1 + 0 // [putting value returned from persistence(14)] persistence(14) = 1 + persistence(4) = 1 + 0 // [putting value returned from persistence(4)] persistence(4) = 0
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