Explicador de Dibuja cuadros con recursividad
Objetivo de este acertijo:
Este acertijo presenta el concepto de recursión. Actualizarás un arreglo de posibles entradas para que una función incluya una entrada que haga que la función se ejecute de nuevo.
Tutorial de la solución:
La recursión es una función que se llama de forma reiterativa desde dentro de su propio bloque de código hasta que se cumpla una condición final (esto se conoce como caso base).
En el código con el que comienzas, un valor, choice
, se elige al azar del arreglo choice
y se usa como un argumento para withRecursion
. La función withRecursion
toma choice
y lo compara con el valor pickAgain
. Si choice
es pickAgain
, entonces se ejecuta el caso recursivo: drawBox()
genera un cuadro negro, se dibuja una newLine()
, se selecciona nextChoice
y withRecursion
se llama a sí misma nuevamente con nextChoice
como un argumento. Si choice
no es pickAgain
, se activa el caso base: drawBox()
usa el color del valor de of choice
para generar un cuadro y la función termina. Como está, el arreglo choices
solo consta de valores de color, de modo que el caso recursivo nunca se activa. En este acertijo, agregarás pickAgain
al arreglo choices
de modo que el caso recursivo se pueda ejecutar.
Para completar el acertijo, agrega pickAgain
dos veces al arreglo choices
.
Pulsa algunas veces el botón de reproducción en la solución de ejemplo. Cada cuadro ilustra una vez a través de la función; los cuadros negros representan casos recursivos y un cuadro de color representa el caso base.
Solución del código de ejemplo:
(Pulsa a continuación para revelar)
let choices = ['red', 'yellow', 'blue', pickAgain, pickAgain]
let choice = pickRandom(choices)
function withRecursion (choice) {
if (choice === pickAgain){
drawBox('black')
newLine()
let nextChoice = pickRandom(choices)
return withRecursion(nextChoice)
} else {
return choice
}
}
drawBox(withRecursion(choice))
Conceptos de JavaScript: variable, función, recursividad
Conceptos de Grasshopper: drawBox()
, pickRandom()
Código adicional (código oculto que se ejecuta antes del código del acertijo):
let pickAgain= 'pickAgain'