CursosEmpresasBlogLiveConfPrecios

Fibonnacci y la Recursividad

Clase 19 de 31 • Curso de Introducción al Pensamiento Computacional con Python

Contenido del curso

Introducción al pensamiento computacional

  • 1
    Introducción al pensamiento computacional

    Introducción al pensamiento computacional

    02:26 min
  • 2
    Introducción al cómputo

    Introducción al cómputo

    15:39 min
  • 3
    Introducción a los lenguajes de programación

    Introducción a los lenguajes de programación

    09:25 min

Introducción a Python

  • 4
    Preparación de tu computadora

    Preparación de tu computadora

    01:16 min
  • 5
    Elementos básicos de Python

    Elementos básicos de Python

    10:38 min
  • 6
    Asignación de variables

    Asignación de variables

    06:06 min
  • 7
    Cadenas y entradas

    Cadenas y entradas

    14:12 min
  • 8
    Programas ramificados

    Programas ramificados

    11:36 min
  • 9
    Iteraciones

    Iteraciones

    09:11 min
  • 10
    Bucles for

    Bucles for

    03:48 min

Programas numéricos

  • 11
    Representación de flotantes

    Representación de flotantes

    03:45 min
  • 12
    Enumeración exhaustiva

    Enumeración exhaustiva

    07:20 min
  • 13
    Aproximación de soluciones

    Aproximación de soluciones

    12:45 min
  • 14
    Búsqueda Binaria

    Búsqueda Binaria

    10:34 min

Funciones, alcance y abstracción

  • 15
    Funciones y abstracción

    Funciones y abstracción

    09:12 min
  • 16
    Scope o Alcance

    Scope o Alcance

    10:00 min
  • 17
    Especificaciones del código

    Especificaciones del código

    05:26 min
  • 18
    Recursividad

    Recursividad

    11:06 min
  • 19
    Fibonnacci y la Recursividad

    Fibonnacci y la Recursividad

    Viendo ahora

Tipos estructurados, mutabilidad y funciones de alto nivel

  • 20
    Funciones como objetos

    Funciones como objetos

    01:40 min
  • 21
    Tuplas

    Tuplas

    08:09 min
  • 22
    Rangos

    Rangos

    07:35 min
  • 23
    Listas y mutabilidad

    Listas y mutabilidad

    14:00 min
  • 24
    Diccionarios

    Diccionarios

    06:56 min

Pruebas y debugging

  • 25
    Pruebas de caja negra

    Pruebas de caja negra

    11:50 min
  • 26
    Pruebas de caja de cristal

    Pruebas de caja de cristal

    07:45 min
  • 27
    Debugging

    Debugging

    09:56 min

Excepciones y afirmaciones

  • 28
    Manejo de excepciones

    Manejo de excepciones

    07:05 min
  • 29
    Excepciones y control de flujo

    Excepciones y control de flujo

    01:26 min
  • 30
    Afirmaciones

    Afirmaciones

    04:36 min
  • 31
    Conclusiones

    Conclusiones

    02:33 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads

      La secuencia de Fibonacci es una función matemática que se define recursivamente. En el año 1202, el matemático italiano Leonardo de Pisa, también conocido como Fibonacci, encontró una fórmula para cuantificar el crecimiento que ciertas poblaciones experimentan.

      Imagina que una pareja de conejos nace, un macho y una hembra, y luego son liberados. Imagina, también, que los conejos se pueden reproducir hasta la edad de un mes y que tienen un periodo de gestación también de un mes. Por último imagina que estos conejos nunca mueren y que la hembra siempre es capaz de producir una nueva pareja (un macho y una hembra). ¿Cuántos conejos existirán al final de seis meses?

      Una forma de visualizar este crecimiento es mirándolo de forma tabular:

      MesHembras
      01
      11
      22
      33
      45
      58
      613

      Un punto importante a considerar es que para el mes n > 1, hembras(n) = hembras(n - 1) + hembras(n - 2).

      Como podemos ver, tenemos una definición distinta a la de factorial que vimos anteriormente. En específico, tenemos dos casos base (0 y 1) y tenemos dos llamadas recursivas (hembras(n - 1) + hembras(n - 2)).

      Podemos crear una solución recursiva de manera sencilla:

      def fibonacci(n): if n == 0 or n == 1: return 1 return fibonacci(n - 1) + fibonacci(n - 2)

      Aunque la definición es muy sencilla, es también bastante ineficiente. En los siguientes cursos de la serie de pensamiento computacional veremos como calcular exactamente la eficiencia de este algoritmo y cómo optimizarlo. De mientras, platícanos si conoces alguna otra definición recursiva.

      Comentarios

      Marco Antonio Candia Ortega

      Marco Antonio Candia Ortega

      student•
      hace 5 años
        Fredy Mendoza Vargas

        Fredy Mendoza Vargas

        student•
        hace 5 años
        Davis Álvarez

        Davis Álvarez

        student•
        hace 5 años
      Cesar Arturo Castanon Acuna

      Cesar Arturo Castanon Acuna

      student•
      hace 5 años
        Federico Nahuel Gonzalez

        Federico Nahuel Gonzalez

        student•
        hace 5 años
        Diana Marcela Carrillo Suárez

        Diana Marcela Carrillo Suárez

        student•
        hace 5 años
      Fabrizio Fasanando Sotelo

      Fabrizio Fasanando Sotelo

      student•
      hace 6 años
        Jean Carlos Rodriguez

        Jean Carlos Rodriguez

        student•
        hace 6 años
        Marcos Monteverde

        Marcos Monteverde

        student•
        hace 3 años
      Carlos Eduardo Gomez García

      Carlos Eduardo Gomez García

      teacher•
      hace 5 años
        Enzo Rafael Cárdenas Nicho

        Enzo Rafael Cárdenas Nicho

        student•
        hace 5 años
        Alejandro Cuello Maure

        Alejandro Cuello Maure

        student•
        hace 5 años
      Manuel Alejandro Hermoso

      Manuel Alejandro Hermoso

      student•
      hace 6 años
        Carlos Arturo Rueda Calier

        Carlos Arturo Rueda Calier

        student•
        hace 6 años
        Lorenzo Enrique Piñango Cerezo

        Lorenzo Enrique Piñango Cerezo

        student•
        hace 5 años
      Eglantina Dani

      Eglantina Dani

      student•
      hace 5 años
        Sergio Iván Piñón Peña

        Sergio Iván Piñón Peña

        student•
        hace 5 años
        Miguel Andres Rendon Reyes

        Miguel Andres Rendon Reyes

        student•
        hace 5 años
      Omar Ramirez

      Omar Ramirez

      student•
      hace 5 años
        Abrahan Javier Gamez

        Abrahan Javier Gamez

        student•
        hace 4 años
        Alejandro Ching

        Alejandro Ching

        student•
        hace 4 años
      Jose Flores

      Jose Flores

      student•
      hace 6 años
        María Cristina Chuchón Pérez

        María Cristina Chuchón Pérez

        student•
        hace 6 años
        Andrés Soret Chacin

        Andrés Soret Chacin

        student•
        hace 3 años
      Juan David Cepeda López

      Juan David Cepeda López

      student•
      hace 5 años
        Marcos Monteverde

        Marcos Monteverde

        student•
        hace 3 años
      Antonio Demarco Bonino

      Antonio Demarco Bonino

      student•
      hace 6 años
        Aidan Lorenzo

        Aidan Lorenzo

        student•
        hace 6 años
      David Antonio Garcia Saaib

      David Antonio Garcia Saaib

      student•
      hace 6 años
        José Rodrigo Arana Hi

        José Rodrigo Arana Hi

        student•
        hace 6 años
      Iván Arcos

      Iván Arcos

      student•
      hace 5 años
      Bayron Danilo Ortiz Foronda

      Bayron Danilo Ortiz Foronda

      student•
      hace 5 años
      Mario Cabrera Vicencio

      Mario Cabrera Vicencio

      student•
      hace 6 años
        Mario Cabrera Vicencio

        Mario Cabrera Vicencio

        student•
        hace 6 años
        sebastian felipe herrera sanchez

        sebastian felipe herrera sanchez

        student•
        hace 6 años
      Francisco Javier Aguilar Lara

      Francisco Javier Aguilar Lara

      student•
      hace 6 años
        Roberto Rodrigo Ruiz

        Roberto Rodrigo Ruiz

        student•
        hace 6 años
      Angel Estrada

      Angel Estrada

      student•
      hace 6 años
        Andres Felipe Noguera Escandon

        Andres Felipe Noguera Escandon

        student•
        hace 6 años
        Angel Estrada

        Angel Estrada

        student•
        hace 6 años
      Rogger Abel Vizarreta Palomino

      Rogger Abel Vizarreta Palomino

      student•
      hace 5 años
        Vidale C.

        Vidale C.

        student•
        hace 5 años
        Rogger Abel Vizarreta Palomino

        Rogger Abel Vizarreta Palomino

        student•
        hace 5 años
      Cristian Alejandro Velasco Cernas

      Cristian Alejandro Velasco Cernas

      student•
      hace 6 años
      Martin Campos

      Martin Campos

      student•
      hace 6 años
      Miguel Andres Rendon Reyes

      Miguel Andres Rendon Reyes

      student•
      hace 5 años
        Fernando Quinteros Gutierrez

        Fernando Quinteros Gutierrez

        student•
        hace 5 años
        Moisés Manuel Morín Hevia

        Moisés Manuel Morín Hevia

        student•
        hace 5 años

      Les comparto paso a paso como entenderle al algoritmo de Fibonacci-recursividad, ya que a mi me costo bastante, espero que les sirva de referencia.

      fibonacci explicado.png

      Gracias

      Gracias.

      🔴No esperen a la siguiente clase. 🔴 . Resuelvan sus dudas aquí: Recursion, the Fibonacci Sequence and Memoization || Python Tutorial || Learn Python Programming . Aquí la Playlist mas hardcore del mundo: Python . 🥗 ¡Éxito!

      Gracias!

      muy bueno, gracias

      Creo que estaría bien explciar mes por mes como va evolucionando el ejercicio. En el mes 1 solo hay una hembra, esa hembra da a luz a otra hembra, por ello en el mes 2 hay 2 hembras, pero solo una de ellas fertil, por lo que la unica hembra fertil tiene 1 hembra, para el mes 3 hay 3 hembras, en este mes, la hembra del mes 1 ya vuelve a ser fertil y la que era fertil en el mes 2 ya no lo es, en el mes 3 hay 2 hembras fertiles, estas hembras dan a luz 1 hembra cada una. Por ello en el mes 4 hay 5 hembras, de las cuales 2 no son fertiles, las 3 restantes dan a luz hembra cada una y para el mes 5 hay (5+3) 8 hembras, pero solo 5 fertiles, ya que 3 de estas 8 acaban de dar a luz. Y asi sucesivamente. Espero que se entienda y que este en lo correcto. Cualquier aclaración y/o corrección es bienvenida.

      Aqui te muestro en una tabla, creo que se entiende mejor, lo que tienes que saber es que: r = reproduccion n = nacimiento H = hembras M = Machos

      Asmuendo las condiciones del problema

      month M H 0 1 1 1 1 1 r 2 2 2 n, r 3 3 3 n, r, r 4 5 5 n, n, r, r, r 5 8 8 n, n, n, r, r, r, r, r 6 13 13 n, n, n, n. n. r, r, r, r, r, r, r, r

      Para el mes 0 no pasa nada. en el mes 1 se relacionan. en el mes 2 nace una pareja que ya esta se relacionara con la anterios. en el mes 3 la r del mes 2, pasa a ser n en el mes 3, y el resto se relacionaran seran 'r' Y asi hasta completar los seis meses.

      Excelente el aporte!!

      Creo que la manera más fácil de entender esto es tal y como lo dice la Wikipedia: el número siguiente es la suma de los dos números anteriores:

      n: El número buscado n-1: El número anterior n-2: El número anterior al anterior

      Aunque se puede resolver con recursividad, creo que sería más fácil y tal vez más eficiente con un ciclo 🤔

      ✌ me ayudo tu comentario, estaba algo perdido.

      Gracias

      Buena idea, me puse a pensar como hacerlo y llegúe al siguiente metodo con ciclos:

      def fibonacci(cantidad): # inicializamos el numero que se imprimira en uno ya que es una restriccion a = 1 # Contador de cuantos numeros se han calculado times = 0 # Variable que usaremos para guardar el numero de atras al actual b = 0 while times < cantidad: times += 1 # imprimimos el numero actual print(a) # calculamos de la siguiete forma ( el nuevo numero es la suma del actual con el numero anterior (variable b) a este, y el numero anterior cambia su valor al actual "pasado") a , b = a+b, a

      la forma de asignar valores de esta forma, es como una especie de sintactic sugar:

      a, b = a+b, a

      El valor de a queda guardado temporalmente en otra variable y el interprete se encarga de asignarle ese valor viejo a la b.

      Si no pasara esto, lo programaramos así:

      temporal = a a = a + b b = temporal

      La sucesión de Fibonacci en la naturaleza

      !numero de conejos

      Mirar este articulo esta muy interesante la sucesión de Fibonacci en la naturaleza.

      muy bueno el articulo

      Excelente articulo

      Otros ejemplos de funciones recursivas son:

      1. Triángulo de Pascal (la dsposición de números tales que cada fila corresponde a los coeficientes del binomio (a+b)^n donde n representa el numero de filas. La fila n se obtiene de la fila n-1, Rn(i)=Rn-1(i-1)+Rn-1(i) ).
      2. Polinomios de Hermite (los polinomios de Hermite de orden n>2 se pueden expresar en términos de los dos primeros polinomios H0(x) y H1(x), Hn(x) = 2x*Hn-1(x) - 2(n-1)Hn-2(x) )

      Estaría genial programarlos

      Bro, ¿Tienes documentación?

      Con este ejemplo sí pude entender muchas gracias

      Muchas gracias!!, estaba haciendolo en mi mente de esa manera, muchas gracias!!

      Este tema de recursividad me parece que la practica solamente hará que uno lo domine, pero aquí durante estas clases se nos muestra cuando una función se llama a uno mismo, pero el principio de recursividad al menos a nivel matemático es poder descomponer una operación en operaciones mas simples o también viceversa, por ejemplo si alguien te pide realizar la suma que del 21 + 22 + 23 + ....... +100, para solucionarlo lo que haríamos es un for que inicie de 21 y al final que llegue al 100 para sumarlo de manera de que sume que da como resultado 4840, dependiendo del numero de inicio y numero final serian muchas iteraciones, pero hay una manera muy fácil de hacerlo, ya que se puedes simplificarlo de la siguiente manera:

      Sabemos que 100 + 21 es igual a 121, también sabemos que 99 + 22 es igual a 121, y que 98 +23 es igual a 121

      Este resultado se repite y dará el mismo resultado, entonces podemos predecir que los números centrales de la suposición anterior darán 121, por lo que podemos decir que esta operación se repetirá 40 veces que es la mitad de los ciclos que haría el for por lo tanto podemos ahorrarnos el for y hacer la siguiente simple operación (21 + 100) * 40 = 21 + 22 + 23 ......+ 100.

      total = 0 limite_inf = int(input("Escribe el valor en donde comenzara la sumatoria: ")) limite_sup = int(input("Escribe el valor final que sumara la suma")) for numero in range(limite_inf, limite_sup): total += numero print(numero) print(total) repeticiones = (limite_sup - limite_inf)/2 print(repeticiones) resultado_simplificado = (limite_sup + limite_inf - 1)*repeticiones print(resultado_simplificado)

      Esto siempre y cuando las repeticiones sean pares aunque para las impares solo se necesita eliminar el ultimo numero para tener una repetición par poder hacer la operación simple, y el resultado sumarle el excedente para tener el resultado correcto.

      buen ejemplo!

      Muy muy buen ejemplo 👍👍

      Para poder entenderlo un poco mejor, use ambas maneras, en iteración y en recursividad:

      code.png

      Gracias!!"

      Con este video terminé de entender la Secuencia Fibonacci: https://www.youtube.com/watch?v=DKGsBUxRcV0

      Gracias por el video amigo me ha ayudado a entender la sucesion

      explicacion mas bonita haciendo clic aqui Imagina que agregamos el numero 1 Entraría en el if por lo tanto hasta ahí llegaría nuestro programa

      Si elegimos el numero 2 Se brinca el if porque pues no cuenta, y se va directo al return que llama directo a la función, por lo que obtenemos el primer atributo del return fibonacci(2 - 1), y como es igual a 1, retornamos el 1. el segundo punto es fibonacci(n - 2) por lo que su respuesta es 0 al volver a la función, pero en la condición vemos que si es 0 retorna un 1. es decir que al momento de retornar tenemos 1 + 1.

      Si elegimos el numero 3

      Entramos a la función con n=3, por lo que nos brincamos el if, el primer resultado del retorno es fibonacci(3 - 1), es decir que volvemos a entrar la función con fibonacci(2), por lo que nos brincamos el if y nos vamos al return. Espero te hayas dado cuenta, obtenemos el resultado de si hubiéramos elegido el numero dos, si no te queda claro sigue los pasos de arriba donde dice 'si elegimos el numero 2'.

      El chiste que de la línea return ya tenemos el primer termino que es 1+1 que es igual a fibonacci(2). Ahora calculamos el otro numero fibonacci(3-2) que seria igual a fibonacci(1) por lo tanto seria igual a 1.

      Por si acaso te dire qué está pasando aqui, el return principal se encarga de hacer una lista de sumas de puros digitos 1.

      Es decir que tu al buscar el fibonacci de algún numero, el resultado es la suma de 0+1 n veces.

      Un ejemplo mas: tu al buscar el fibonacci de 6 su resultado será el return que llamo a la misma función 13 veces sumando 1+1+1+1+1+... hasta obtener 13. Cada iteración sumó un 1 al resultado

      Si elegimos el numero 4 Este ejemplo será mas gráfico

      fibo(4) = fibo(4-1) + fibo(4-2) = fibo(3) + fibo(2) = (fibo(3-1) + fibo(3-2)) + (fibo(2-1) + fibo(2-2)) = (fibo(2) + fibo(1)) + (fibo(1) + fibo(0)) = ((fibo(2-1) + fibo(2-2)) + fibo(1)) + (fibo(1) + fibo(0)) = ((fibo(1) + fibo(0)) + fibo(1)) + (fibo(1) + fibo(0)) = ((1 + 1) + 1) + (1 + 1)) = 1 + 1 + 1 + 1 + 1 = 5
      def fibonacci(n): print(n) if n == 0 or n == 1: return 1 return fibonacci(n - 1) + fibonacci(n - 2) n = int(input('Ingresa un numero: ')) print(f'El numero final fibonacci es {fibonacci(n)}')

      muchas gracias, ahora lo comprendo mejor.

      Cómo opera la serie de Fibonacci:

      Genera el número siguiente agregando dos números anteriores. Es decir, comienza con dos números: F0 y F1. Los valores iniciales de F0 y F1 se pueden tomar 0, 1 o 1, 1 respectivamente.

      Se tienen que cubrir las siguientes condiciones:

      Fn = Fn-1 + Fn-2

      Hola a todos, es importante tener en cuenta que la sucesión de fibonacci siempre inicia en F0 = 0, matemáticamente la definición de recurrencia esta dada por:

      Screenshot_2021-01-17 Sucesión de Fibonacci - Wikipedia, la enciclopedia libre.png

      Se puede leer un poco más en la Wiki. Con la anterior definición de recurrencia se implementa el algoritmo recursivo en Python o en cualquier otro lenguaje que les guste. Este fue el que implementé en código Python:

      def fibonacci(n): """Calcula el n-esimo elemento sucesión fibonacci. params: n: int -- n-esimo elemento return: fibonacci(n): int """ if n < 2: return n return fibonacci(n - 1) + fibonacci(n - 2)

      Aclarar que para el ejemplo que da el profesor David, referente a los conejos, se puede crear confusión ya que para este problema al mes 0, se tiene 1 pareja de conejos. Luego en el mes 1 esta pareja de conejos se cruza, pero aún sigue existiendo la misma pareja (1 pareja de conejos).

      Finalmente para el mes 2 la pareja da a luz otra pareja de conejos, entonces ya se tienen 2 parejas y nuevamente la pareja que ya existía vuelve a cruzarse y así continúa el ciclo.

      • Inicio Mes 0: Tengo 1 pareja conejos (Pareja A).
      • Mes 1: Pareja de conejos A se cruzan. Aún tengo 1 pareja de conejos.
      • Mes 2: Pareja de conejos A da a luz otra pareja B, y vuelven a cruzarse pareja conejos A. Ahora tengo 2 parejas A y B. . . . y así continúa el ciclo. Así que para una implementación correcta de Fibonacci, debe utilizarse la definición matemática de recurrencia que mostré al inicio, ya que lo referente a los conejos es una forma de explicar la sucesión.

      Espero sea útil el aporte. Un saludo a todos.

      En este video se da una excelente explicación de esta clase y la pasada. Espero les sirva.

      https://www.youtube.com/watch?v=yX5kR63Dpdw

      Uff gracias, ahora lo entiendo mucho mejor

      Muchas gracias!

      Mi código:

      def main(): def fibonacci(n): # print(n) if n==0 or n==1: return 1 return fibonacci(n-1)+fibonacci(n-2) print('Sucesion de fibonacci') numero = int(input('Introduce cuantos numeros de fibonacci quieres generar: ')) for i in range(numero): print(i,fibonacci(i)) if __name__ == "__main__": main()

      y lo que regresa:

      Sucesion de fibonacci Introduce cuantos numeros de fibonacci quieres generar: 20 0 1 1 1 2 2 3 3 4 5 5 8 6 13 7 21 8 34 9 55 10 89 11 144 12 233 13 377 14 610 15 987 16 1597 17 2584 18 4181 19 6765

      Tengo una pregunta. Para que agregas este IF, Que utilidad tiene? if name == "main": main()

      Es como se define el inicio de un programa de python y es donde inicia cuando se ejecuta en la terminal. Para mayor detalle, te recomiendo realizar el curso básico de python, es buenísimo y Facundo (el profesor) lo explica super bien. Saludos y éxito!

      Así para imprimir una determinada cantidad de números de la serie

      def fibonacci(n, i=0, j=1): print(i+j) return fibonacci(n-1, i+j, i) if n > 1 else 0 if __name__ == '__main__': fibonacci(int(input('Cuantós número de la serie desea imprimir?: ')))

      ¡Genial! Piensa qué tal que alguien anda de curioso y cambia el main, eso le daria acceso a cambiar i e j!!!! y eso desploma la función, para evitar eso, yo pondría i=0 y j=1 dentro de la función porque así como preparámetros, el usuario podría combiarlos cuando llama la función, claro, para ello debe de modificar main pero uno nunca sabe. El usuario es muy curioso jajaja

      Claro, pero dejarlo como parametros da apertura a que se formen nuevas series según lo que se necesite, que el usuario sea muy curioso está muy bien.

      Si no entendieron muy bien de qué va pueden echarle un vistazo a este video:

      https://www.youtube.com/watch?v=k6I_TOW6O2o&ab_channel=KhanAcademyEspa%C3%B1ol

      La sucesión de Fibonacci es la sucesión de números que, empezando por la unidad, cada uno de sus términos es la suma de los dos anteriores (1,1,2,3,5,8,13,…).

      Quieren ver una canción de esto de dos minutos? vean al

      ¡Muy buen aporte umi! 🤟 Recuerda clasificar tus aportes y preguntas de manera correcta para tener un curso y plataforma ordenada 😉

      https://genius.com/Dr-steel-fibonacci-sequence-lyrics