* Removes comments in js challanges by default * fix local-scope-and-functions test regex * fix all languages * revert language changes * removed unnecessary removeJSComments from challenges * fix challanges in other languages * removed removeJSComments from all challanges
3.4 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5cd9a70215d3c4e65518328f | Utiliza recursión para crear una cuenta regresiva | 1 | 305925 | use-recursion-to-create-a-countdown |
--description--
En el desafío anterior, aprendiste como usar la recursión para reemplazar un bucle for
. Ahora, echemos un vistazo a una función más compleja que devuelve un arreglo de enteros consecutivos empezando con 1
hasta el número pasado a la función.
Como se menciona en el desafío anterior, habrá un caso base. El caso base le dice a la función recursiva cuando no necesita llamarse a sí misma. Es un caso simple donde el valor de retorno ya se conoce. También habrá una llamada recursiva la cual ejecuta la función original con argumentos diferentes. Si la función se escribe correctamente, eventualmente el caso base será alcanzado.
Por ejemplo, digamos que quieres escribir una función recursiva que devuelva un arreglo conteniendo los números 1
hasta n
. Esta función necesitará aceptar un argumento, n
que representa el número final. Entonces necesitará llamarse a sí misma con valores progresivamente más pequeños de n
hasta que alcance 1
. Podrías escribir la función de la siguiente manera:
function countup(n) {
if (n < 1) {
return [];
} else {
const countArray = countup(n - 1);
countArray.push(n);
return countArray;
}
}
console.log(countup(5));
El valor [1, 2, 3, 4, 5]
se mostrará en la consola.
Al principio, esto parece contraintuitivo ya que el valor de n
disminuye, pero los valores en el arreglo final se están incrementando. Esto sucede porque la inserción ocurre al último, después de la llamada recursiva. En el punto donde n
es empujado en el arreglo, countup(n - 1)
ya ha sido evaluada y devuelto [1, 2, ..., n - 1]
.
--instructions--
Hemos definido una función llamada countdown
con un parámetro (n
). La función debe usar recursión para devolver un arreglo conteniendo los n
enteros hasta 1
basado en el parámetro n
. Si la función es llamada con un número menor a 1, la función debe devolver un arreglo vacío. Por ejemplo, llamar esta función con n = 5
debe devolver el arreglo [5, 4, 3, 2, 1]
. Tu función debe usar recursión llamándose a sí misma y no debe usar bucles de ningún tipo.
--hints--
countdown(-1)
debe devolver un arreglo vacío.
assert.isEmpty(countdown(-1));
countdown(10)
debe devolver [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
assert.deepStrictEqual(countdown(10), [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]);
countdown(5)
debe devolver [5, 4, 3, 2, 1]
assert.deepStrictEqual(countdown(5), [5, 4, 3, 2, 1]);
Tu código no debe depender de ningún tipo de bucles (for
, while
o funciones de orden alto tales como forEach
, map
, filter
, y reduce
).
assert(
!code.match(/for|while|forEach|map|filter|reduce/g)
);
Debes usar recursión para resolver este problema.
assert(
countdown.toString().match(/countdown\s*\(.+\)/)
);
--seed--
--seed-contents--
// Only change code below this line
function countdown(n){
return;
}
// Only change code above this line
--solutions--
function countdown(n){
return n < 1 ? [] : [n].concat(countdown(n - 1));
}