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

    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

    03:48 min

Programas numéricos

  • 11

    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

    Viendo ahora

Tipos estructurados, mutabilidad y funciones de alto nivel

  • 20

    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

    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.

        Marco Antonio Candia Ortega

        Marco Antonio Candia Ortega

        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

          Fredy Mendoza Vargas

          Fredy Mendoza Vargas

          student•
          hace 5 años

          Gracias

          Davis Álvarez

          Davis Álvarez

          student•
          hace 5 años

          Gracias.

        Cesar Arturo Castanon Acuna

        Cesar Arturo Castanon Acuna

        student•
        hace 5 años

        🔴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!

          Federico Nahuel Gonzalez

          Federico Nahuel Gonzalez

          student•
          hace 5 años

          Gracias!

          Diana Marcela Carrillo Suárez

          Diana Marcela Carrillo Suárez

          student•
          hace 5 años

          muy bueno, gracias

        Fabrizio Fasanando Sotelo

        Fabrizio Fasanando Sotelo

        student•
        hace 6 años

        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.

          Jean Carlos Rodriguez

          Jean Carlos Rodriguez

          student•
          hace 6 años

          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.

          Marcos Monteverde

          Marcos Monteverde

          student•
          hace 3 años

          Excelente el aporte!!

        Carlos Eduardo Gomez García

        Carlos Eduardo Gomez García

        teacher•
        hace 5 años

        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 🤔

          Enzo Rafael Cárdenas Nicho

          Enzo Rafael Cárdenas Nicho

          student•
          hace 5 años

          ✌ me ayudo tu comentario, estaba algo perdido.

          Gracias

          Alejandro Cuello Maure

          Alejandro Cuello Maure

          student•
          hace 5 años

          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
        Manuel Alejandro Hermoso

        Manuel Alejandro Hermoso

        student•
        hace 6 años

        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.

          Carlos Arturo Rueda Calier

          Carlos Arturo Rueda Calier

          student•
          hace 6 años

          muy bueno el articulo

          Lorenzo Enrique Piñango Cerezo

          Lorenzo Enrique Piñango Cerezo

          student•
          hace 5 años

          Excelente articulo

        Eglantina Dani

        Eglantina Dani

        student•
        hace 5 años

        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) )
          Sergio Iván Piñón Peña

          Sergio Iván Piñón Peña

          student•
          hace 5 años

          Estaría genial programarlos

          Miguel Andres Rendon Reyes

          Miguel Andres Rendon Reyes

          student•
          hace 5 años

          Bro, ¿Tienes documentación?

        Omar Ramirez

        Omar Ramirez

        student•
        hace 5 años
          Abrahan Javier Gamez

          Abrahan Javier Gamez

          student•
          hace 4 años

          Con este ejemplo sí pude entender muchas gracias

          Alejandro Ching

          Alejandro Ching

          student•
          hace 4 años

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

        Jose Flores

        Jose Flores

        student•
        hace 6 años

        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.

          María Cristina Chuchón Pérez

          María Cristina Chuchón Pérez

          student•
          hace 5 años

          buen ejemplo!

          Andrés Soret Chacin

          Andrés Soret Chacin

          student•
          hace 3 años

          Muy muy buen ejemplo 👍👍

        Juan David Cepeda López

        Juan David Cepeda López

        student•
        hace 5 años

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

        code.png

          Marcos Monteverde

          Marcos Monteverde

          student•
          hace 3 años

          Gracias!!"

        Antonio Demarco Bonino

        Antonio Demarco Bonino

        student•
        hace 5 años

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

          Aidan Lorenzo

          Aidan Lorenzo

          student•
          hace 5 años

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

        David Antonio Garcia Saaib

        David Antonio Garcia Saaib

        student•
        hace 6 años

        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)}')
          José Rodrigo Arana Hi

          José Rodrigo Arana Hi

          student•
          hace 6 años

          muchas gracias, ahora lo comprendo mejor.

        Iván Arcos

        Iván Arcos

        student•
        hace 5 años

        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

        Bayron Danilo Ortiz Foronda

        Bayron Danilo Ortiz Foronda

        student•
        hace 5 años

        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.

        Mario Cabrera Vicencio

        Mario Cabrera Vicencio

        student•
        hace 6 años

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

          Mario Cabrera Vicencio

          Mario Cabrera Vicencio

          student•
          hace 6 años

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

          sebastian felipe herrera sanchez

          sebastian felipe herrera sanchez

          student•
          hace 6 años

          Uff gracias, ahora lo entiendo mucho mejor

        Francisco Javier Aguilar Lara

        Francisco Javier Aguilar Lara

        student•
        hace 6 años
          Roberto Rodrigo Ruiz

          Roberto Rodrigo Ruiz

          student•
          hace 6 años

          Muchas gracias!

        Angel Estrada

        Angel Estrada

        student•
        hace 6 años

        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
          Andres Felipe Noguera Escandon

          Andres Felipe Noguera Escandon

          student•
          hace 6 años

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

          Angel Estrada

          Angel Estrada

          student•
          hace 6 años

          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!

        Rogger Abel Vizarreta Palomino

        Rogger Abel Vizarreta Palomino

        student•
        hace 5 años

        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?: ')))
          Vidale C.

          Vidale C.

          student•
          hace 5 años

          ¡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

          Rogger Abel Vizarreta Palomino

          Rogger Abel Vizarreta Palomino

          student•
          hace 5 años

          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.

        Cristian Alejandro Velasco Cernas

        Cristian Alejandro Velasco Cernas

        student•
        hace 5 años

        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

        Martin Campos

        Martin Campos

        student•
        hace 6 años

        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,…).

        Miguel Andres Rendon Reyes

        Miguel Andres Rendon Reyes

        student•
        hace 5 años

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

          Fernando Quinteros Gutierrez

          Fernando Quinteros Gutierrez

          student•
          hace 5 años

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

          Moisés Manuel Morín Hevia

          Moisés Manuel Morín Hevia

          student•
          hace 5 años

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