Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

95
Views
Estoy haciendo el clásico problema de recursión de contar escaleras dando uno o dos pasos... pero tengo que generar cada combinación

Entonces, la premisa básica es dar 'n' cantidad de escaleras, encontrar todas las combinaciones posibles de tomar 1 o 2 pasos a la vez. Como pasé mucho tiempo aprendiendo a resolver la sucesión de Fibonacci con recursividad, inmediatamente noté la similitud entre los dos problemas. Descubrí cómo resolver el número de combinaciones... pero estoy completamente atascado cuando trato de descubrir cómo generar cada combinación posible.

Aquí está la solución que he encontrado ...

 function countWaysToReachNthStair(n) { if (n === 1) { return 1; } if (n === 2) { return 2; } return countWaysToReachNthStair(n-1) + countWaysToReachNthStair(n-2) } console.log(countWaysToReachNthStair(4));

Cada vez que trato de agregar cosas a una matriz a la salida, aparece un error. Cualquier consejo o truco sería muy apreciado...

El resultado esperado para llamar

 countWaysToReachNthStair(4)

sería

 5 ((1, 1, 1, 1), (1, 1, 2), (2, 1, 1), (2, 2))
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Los generadores son perfectos para problemas relacionados con combinaciones y permutaciones:

 function* ways(n) { if (n <= 0) return if (n <= 2) yield [n] for (const w of ways(n - 2)) yield [2, ...w] for (const w of ways(n - 1)) yield [1, ...w] } for (const w of ways(4)) console.log(`(${w.join(",")})`)

 (2,2) (2,1,1) (1,2,1) (1,1,2) (1,1,1,1)

Si está interesado en el recuento total, puede reunir todas las formas en una matriz y leer la propiedad de length del resultado:

 console.log(Array.from(ways(4)).length)
 5
about 4 years ago · Juan Pablo Isaza Report

0

Más o menos como lo entiende el OP...

 function waysToReachNthStair(n) { if (n === 1) return [[1]]; // there's one way to take 1 stair if (n === 2) return [[2], [1,1]]; // there are two ways to take 2 stairs return [ // prepend 1 to each way we can take n-1 stairs, and // prepend 2 each way we can take n-2 stairs ...waysToReachNthStair(n-1).map(way => [1, ...way]), ...waysToReachNthStair(n-2).map(way => [2, ...way]) ] } console.log(waysToReachNthStair(4));

Explicando map(), dice: dada una matriz como [x, y, z, ...] y una función f , devuelve una nueva matriz como [f(x), f(y), f(z), ...] .

about 4 years ago · Juan Pablo Isaza Report

0

Puede calcular el número total de pasos y la ruta a pasos como:

 const result = []; function countWaysToReachNthStairHelper(n, arr) { if (n === 1) { result.push(arr.join("") + "1"); return 1; } if (n === 2) { const str = arr.join(""); result.push(str + "1" + "1"); result.push(str + "2"); return 2; } arr.push(1); const first = countWaysToReachNthStairHelper(n - 1, arr); arr.pop(); arr.push(2); const second = countWaysToReachNthStairHelper(n - 2, arr); arr.pop(); return first + second; } function countWaysToReachNthStair(n) { return countWaysToReachNthStairHelper(n, []); } console.log(countWaysToReachNthStair(4)); console.log(result);

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!