Skip to content

Instantly share code, notes, and snippets.

@KarlHeitmann
Created January 4, 2023 01:51
Show Gist options
  • Save KarlHeitmann/1b4fb8f0e8388419a2157bcbab6cac25 to your computer and use it in GitHub Desktop.
Save KarlHeitmann/1b4fb8f0e8388419a2157bcbab6cac25 to your computer and use it in GitHub Desktop.
Ejemplos fibonacci y recursividad, tareas e ideas para practicar recursividad
// Correrlo con:
// node recursividad.js
/* FIBONACCI
1, 1, 2, 3, 5, 8, 13, 21
1
1
1+1 = 2
2 + 1 = 3
3 + 2 = 5
5 + 3 = 8
8 + 5 = 13
*/
function fibonacci(n) {
let ultimo_n = 1
let penultimo_n = 1
if (n == 1) {
return 1
} else if (n == 2) {
return 1
} else {
let auxiliar = null
for (let i = 2; i < n; i++) {
auxiliar = ultimo_n + penultimo_n
penultimo_n = ultimo_n
ultimo_n = auxiliar
}
return ultimo_n
}
}
function fibonacci_recursivo(n) {
if (n == 1) {
return 1
} else if (n == 2) {
return 1
} else if (n > 2) {
return fibonacci_recursivo(n - 1) + fibonacci_recursivo(n - 2)
}
}
console.log("fibo(1) = ", fibonacci(1))
console.log("fibo(2) = ", fibonacci(2))
console.log("fibo(3) = ", fibonacci(3))
console.log("fibo(4) = ", fibonacci(4))
console.log("fibo(5) = ", fibonacci(5))
console.log("fibo(6) = ", fibonacci(6))
console.log("fibo(10) = ", fibonacci(10))
console.log("fibo(25) = ", fibonacci(25))
console.log("fibo(100) = ", fibonacci(100))
console.log("================ RECURSIVIDAD =====================")
console.log("fibo(1) = ", fibonacci_recursivo(1))
console.log("fibo(2) = ", fibonacci_recursivo(2))
console.log("fibo(3) = ", fibonacci_recursivo(3))
console.log("fibo(4) = ", fibonacci_recursivo(4))
console.log("fibo(5) = ", fibonacci_recursivo(5))
console.log("fibo(6) = ", fibonacci_recursivo(6))
console.log("fibo(10) = ", fibonacci_recursivo(10))
console.log("fibo(25) = ", fibonacci_recursivo(25))
// Calcule la suma de los elementos del array
let suma = 0
const arr1 = [1,2,3,4,5,6,7,8,9,10]
for (let i = 0; i < arr1.length; i++) {
const element = arr1[i];
suma = suma + element
// debugger
console.log("i = ", i, " - element = ", element, " - suma = ", suma) // <<--- esto me indica que es lo que está pasando en cada vuelta
}
/*
let i = 0
let sumaa = 0
while (i < arr1.length) {
const element = arr1[i]
sumaa = sumaa + element
// i = i + 1 // Si te olvidas =>
}
*/
console.log("############################")
console.log("Suma array = ", suma)
// Calcule la suma de los elementos del array arr1 SIN ocupar FOR y sin escribirlo manualmente. SOLO CON FUNCIONES.
// PASO 1: IDENTIFIQUE EL CASO TRIVIAL. Coloque su return.
// ==> ¡¡¡ARREGLO VACIO!!!
// arr1 = []
// PASO 2: Tomar el caso general y moverlo hacia el caso trivial, dirigirlo.
// const arr1 = [1,2,3,4,5,6,7,8,9,10]
// [2,3,4,5,6,7,8,9,10]
// [3,4,5,6,7,8,9,10]
// [4,5,6,7,8,9,10]
// [5,6,7,8,9,10]
// ...
// [] => 0
function sumar_func(arr) {
if (arr.length == 0) { // CASO TRIVIAL
// console.log("BINGO!!! Condición de término alcanzada!!!") // CUIDADO!!! Esto puede generar confusion
return 0
} else if (arr.length > 0) {
const primer_elemento = arr[0]
// console.log("primer_elemento = ", primer_elemento, "arr.length = ", arr.length) // CUIDADO!!! Esto puede generar confusion
const auxiliar = primer_elemento + sumar_func(arr.slice(1))
// console.log("auxiliar = ", auxiliar) // CUIDADO!!! Esto puede generar confusion
return auxiliar
// 1+2+3+4+5+6+7+8+9+10+0
}
}
// EJERCICIO: Hacer lo mismo de sumar_func, pero multiplicando los elementos del arr1.
// EJERCICIO 2: modificar sumar_func, pero que tome el ULTIMO elemento del array. .slice(0, arr1.length - 1)
// const arr1 = [1,2,3,4,5,6,7,8,9,10]
// [1,2,3,4,5,6,7,8,9]
// [1,2,3,4,5,6,7,8]
// DESAFIO: METERSE A HACKER RANK. Busca problemas de "algoritmo" BASICOS. Nivel programación cero, que se resuelven usando FOR. PERO ponte el desafio personal de resolverlo con recursividad.
/*
suma NEUTRO ADITIVO es el CERO
Multiplicacion NEUTRO MULTIPLICATIVO es el UNO
MATRICES NEUTRO multiplicativo de matrices
[1, 0, 0]
[0, 1, 0]
[0, 0, 1]
*/
console.log("Suma array RECURSIVO = ", sumar_func(arr1))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment