Cuando una función se llama a sí misma, y crea una nueva ejecución de la función, pero en algún momento debemos parar el proceso (con alguna validación o algo).
function recursiva(num) {
conosle.log(num);
if (num < 5) {
return recursiva(num + 1);
}
else {
return 5;
}
}
recursiva(0);
En este caso, cuando la variable num llega a ‘4’ se vuelve e llamar a la función pasando como argumento el número 5. En esta ejecución, 5 no es menor que 5, entonces se ejecuta el bloque else y se retorna un 5 para cortar con las ejecuciónes.
function recursiva_2(numArray) {
if (numArray.length != 0) {
const firstNum = numArray[0];
console.log(firstNum);
numArray.shift();
recursiva_2(numArray);
}
}
const numbers = [3,4,3,2,5,6,4,3,5,6,8,6,5,9];
recursiva_2(numbers);
function deepCopy(subject) {
let copySubject;
if (Array.isArray(subject)) {
copySubject = [];
}
else if (typeof subject == 'object') {
copySubject = {};
}
else {
return subject;
}
for(key in subject) {
if (typeof subject[key] == 'object') {
copySubject[key] = deepCopy(subject[key]);
}
else if (Array.isArray(subject[key])) {
copySubject.push(subject[key]);
}
else {
copySubject[key] = subject[key];
}
}
return copySubject;
}
function deepFreeze(obj) {
Object.keys(obj).forEach(prop => {
if (typeof obj[prop] === 'object') deepFreeze(obj[prop]);
});
return Object.freeze(obj);
}