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

114
Views
¿Cómo devuelvo una cadena generada por iteración en una función recursiva?

Tengo un problema al devolver una cadena que mapea el camino tomado para llegar al final de un laberinto. La función toma un laberinto de matriz bidimensional de valores de cadena y una matriz de 2 elementos que representan el punto de inicio del laberinto (por ejemplo, [0,0]). Estoy devolviendo la ruta correcta cuando se llama a la función una vez, pero la cadena no se reinicia, por lo que obtengo varias respuestas concatenadas. Código:

 function mazeSolver(maze, index = [0, 0]) { if (typeof mazeSolver.answer == "undefined") { mazeSolver.answer = ""; } const pointer = () => maze[index[0]][index[1]]; if (index[1] < maze[0].length - 1) { index[1] += 1; if (pointer() === " " || pointer() === "e") { mazeSolver.answer += "R"; if (pointer() === "e") return mazeSolver.answer; return mazeSolver(maze, index); } else { if (index[0] < maze.length - 1) { index[1] -= 1; index[0] += 1; if (pointer() === " " || pointer() === "e") { mazeSolver.answer += "D"; if (pointer() === "e") return mazeSolver.answer; return mazeSolver(maze, index); } } } } else if (index[0] < maze.length - 1) { index[0] += 1; if (pointer() === " " || pointer() === "e") { mazeSolver.answer += "D"; if (pointer() === "e") return mazeSolver.answer; return mazeSolver(maze, index); } } } const mySmallMaze = [ [" ", "*", " "], [" ", "*", " "], [" ", " ", "e"], ]; console.log(mazeSolver(mySmallMaze));

registros: "DDRR" en la segunda llamada: "DDRRDDRR"

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Una forma de resolver esto, sin dejar de usar su enfoque mazeSolver.answer , es pasar un parámetro adicional que rastrea si estamos en una llamada recursiva o no. Si no, reseteamos la respuesta:

 function mazeSolver(maze, index = [0, 0], top_level_call = true) { if (top_level_call) { mazeSolver.answer = ""; } const pointer = () => maze[index[0]][index[1]]; if (index[1] < maze[0].length - 1) { index[1] += 1; if (pointer() === " " || pointer() === "e") { mazeSolver.answer += "R"; if (pointer() === "e") return mazeSolver.answer; return mazeSolver(maze, index, false); } else { if (index[0] < maze.length - 1) { index[1] -= 1; index[0] += 1; if (pointer() === " " || pointer() === "e") { mazeSolver.answer += "D"; if (pointer() === "e") return mazeSolver.answer; return mazeSolver(maze, index, false); } } } } else if (index[0] < maze.length - 1) { index[0] += 1; if (pointer() === " " || pointer() === "e") { mazeSolver.answer += "D"; if (pointer() === "e") return mazeSolver.answer; return mazeSolver(maze, index, false); } } } const mySmallMaze = [ [" ", "*", " "], [" ", "*", " "], [" ", " ", "e"], ]; console.log(mazeSolver(mySmallMaze));

Dicho esto, un enfoque más común y estándar sería simplemente pasar la respuesta como un parámetro de método:

 function mazeSolver(maze, index = [0, 0], answer = "") { ... answer += "R"; ... return mazeSolver(maze, index, answer); ... return answer }

Hay al menos un par de razones para preferir el segundo enfoque:

  1. En el segundo enfoque, todas las entradas que necesita la función recursiva están en un solo lugar: parámetros. Esto es más fácil de entender que el primer enfoque, donde algunas entradas están en los parámetros y una se almacena como una propiedad en el propio objeto.
  2. Considere el comportamiento si asignamos mazeSolver a otra variable: let solver = mazeSolver . Ahora el solver está almacenando datos en mazeSolver , lo cual es desordenado y contradictorio.
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!