in

Programa para números de Fibonacci – GeeksforGeeks

gfg 200x200 min

Los números de Fibonacci son los números en la siguiente secuencia de enteros.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …… ..

En términos matemáticos, la secuencia Fn de números de Fibonacci está definida por la relación de recurrencia

Fn = Fn-1 + Fn-2

con valores semilla

F0 = 0 and F1 = 1.

program for fibonacci numbers

Dado un número n, imprima el número n-ésimo de Fibonacci.

Ejemplos:

Input  : n = 2
Output : 1

Input  : n = 9
Output : 34

Escribe una función int fib (int n) que devuelve Fnorte. Por ejemplo, si norte = 0, entonces mentira() debería devolver 0. Si n = 1, debería devolver 1. Para n> 1, debería devolver Fn-1 + Fn-2

For n = 9
Output:34

A continuación se muestran diferentes métodos para obtener el número n de Fibonacci.

Método 1 (usar recursividad)
Un método simple que es una relación de recurrencia matemática de implementación recursiva directa dada anteriormente.

C ++

#include<bits/stdc++.h>

using namespace std;

int fib(int n)

{

    if (n <= 1)

        return n;

    return fib(n-1) + fib(n-2);

}

int main ()

{

    int n = 9;

    cout << fib(n);

    getchar();

    return 0;

}

C

#include<stdio.h>

int fib(int n)

{

   if (n <= 1)

      return n;

   return fib(n-1) + fib(n-2);

}

int main ()

{

  int n = 9;

  printf("%d", fib(n));

  getchar();

  return 0;

}

Java

class fibonacci

{

    static int fib(int n)

    {

    if (n <= 1)

       return n;

    return fib(n-1) + fib(n-2);

    }

     

    public static void main (String args[])

    {

    int n = 9;

    System.out.println(fib(n));

    }

}

Pitón

def Fibonacci(n):

    if n<0:

        print("Incorrect input")

    

    elif n==0:

        return 0

    

    elif n==1:

        return 1

    else:

        return Fibonacci(n-1)+Fibonacci(n-2)

print(Fibonacci(9))

C#

using System;

public class GFG

{

    public static int Fib(int n)

    {

        if (n <= 1)

        {

            return n;

        }

        else

        {

            return Fib(n - 1) + Fib(n - 2);

        }

    }

        

    

    public static void Main(string[] args)

    {

        int n = 9;

        Console.Write(Fib(n));

    }

}

PHP

<?php

function fib($n)

{

    if ($n <= 1)

        return $n;

    return fib($n - 1) +

           fib($n - 2);

}

$n = 9;

echo fib($n);

?>

Javascript

<script>

    let n = 9;

    

    

    function fib(n) {

    if (n <= 1)

        return n;

    return fib(n-1) + fib(n-2);

}

 

    

    document.write(fib(n));

</script>

Complejidad del tiempo: T (n) = T (n-1) + T (n-2) que es exponencial.

Podemos observar que esta implementación hace mucho trabajo repetido (ver el siguiente árbol de recursividad). Así que esta es una mala implementación para el número n de Fibonacci.

                          fib(5)   
                     /                
               fib(4)                fib(3)   
             /                      /        
         fib(3)      fib(2)         fib(2)   fib(1)
        /           /            /      
  fib(2)   fib(1)  fib(1) fib(0) fib(1) fib(0)
  /     
fib(1) fib(0)

Espacio extra: O (n) si consideramos el tamaño de la pila de llamadas a la función, en caso contrario O (1).

Método 2 (usar programación dinámica)
Podemos evitar el trabajo repetido realizado en el método 1 almacenando los números de Fibonacci calculados hasta ahora.

C ++

#include<bits/stdc++.h>

using namespace std;

class GFG{

    

public:

int fib(int n)

{

    

    

    

    

    

    int f[n + 2];

    int i;

    

    

    f[0] = 0;

    f[1] = 1;

    for(i = 2; i <= n; i++)

    {

        

       

       

       f[i] = f[i - 1] + f[i - 2];

    }

    return f[n];

    }

};

int main ()

{

    GFG g;

    int n = 9;

    

    cout << g.fib(n);

    return 0;

}

C

#include<stdio.h>

int fib(int n)

{

  

  int f[n+2];  

  int i;

  

  f[0] = 0;

  f[1] = 1;

  for (i = 2; i <= n; i++)

  {

      

         

      f[i] = f[i-1] + f[i-2];

  }

  return f[n];

}

int main ()

{

  int n = 9;

  printf("%d", fib(n));

  getchar();

  return 0;

}

Java

class fibonacci

{

   static int fib(int n)

    {

    

    int f[] = new int[n+2];

    int i;

     

    

    F[0] = 0;

    F[1] = 1;

    

    for (i = 2; i <= n; i++)

    {

       

         

        F[i] = f[i-1] + f[i-2];

    }

     

    return f[n];

    }

     

    public static void main (String args[])

    {

        int n = 9;

        System.out.println(fib(n));

    }

}

Pitón

def fibonacci(n):

    

    

    f = [0, 1]

    

    

    for i in range(2, n+1):

        f. adjuntar (f[i-1] + F[i-2])

    return f[n]

    

print(fibonacci(9))

C#

using System;

class fibonacci {

    

static int fib(int n)

    {

        

        

        

        

        

        int []f = new int[n + 2];

        int i;

        

        

           

        f[0] = 0;

        f[1] = 1;

        

        for (i = 2; i <= n; i++)

        {

            

               

            f[i] = f[i - 1] + f[i - 2];

        }

        

        return f[n];

    }

    

    

    public static void Main ()

    {

        int n = 9;

        Console.WriteLine(fib(n));

    }

}

PHP

<?php

function fib( $n)

{

    

    

    

    

    

    

    $f = array();

    $i;

    

    

    

    $f[0] = 0;

    $f[1] = 1;

    

    for ($i = 2; $i <= $n; $i++)

    {

        

        

        

        

        $f[$i] = $f[$i-1] + $f[$i-2];

    }

    

    return $f[$n];

}

$n = 9;

echo fib($n);

?>

Javascript

<script>

    function fib(n)

    {

        

        let f = new Array(n+2);

        let i;

        

        f[0] = 0;

        f[1] = 1;

        for (i = 2; i <= n; i++)

        {

            

            

            f[i] = f[i-1] + f[i-2];

        }

        return f[n];

    }

    let n=9;

    document.write(fib(n));

    

    

    

</script>

Método 3 (Método 2 con espacio optimizado)
Podemos optimizar el espacio utilizado en el método 2 almacenando los dos números anteriores solo porque eso es todo lo que necesitamos para obtener el siguiente número de Fibonacci en serie.

C ++

#include<bits/stdc++.h>

using namespace std;

int fib(int n)

{

    int a = 0, b = 1, c, i;

    if( n == 0)

        return a;

    for(i = 2; i <= n; i++)

    {

       c = a + b;

       a = b;

       b = c;

    }

    return b;

}

int main()

{

    int n = 9;

    

    cout << fib(n);

    return 0;

}

C

#include<stdio.h>

int fib(int n)

{

  int a = 0, b = 1, c, i;

  if( n == 0)

    return a;

  for (i = 2; i <= n; i++)

  {

     c = a + b;

     a = b;

     b = c;

  }

  return b;

}

int main ()

{

  int n = 9;

  printf("%d", fib(n));

  getchar();

  return 0;

}

Java

class fibonacci

{

    static int fib(int n)

    {

        int a = 0, b = 1, c;

        if (n == 0)

            return a;

        for (int i = 2; i <= n; i++)

        {

            c = a + b;

            a = b;

            b = c;

        }

        return b;

    }

    public static void main (String args[])

    {

        int n = 9;

        System.out.println(fib(n));

    }

}

Pitón

def fibonacci(n):

    a = 0

    b = 1

    if n < 0:

        print("Incorrect input")

    elif n == 0:

        return a

    elif n == 1:

        return b

    else:

        for i in range(2,n+1):

            c = a + b

            a = b

            b = c

        return b

print(fibonacci(9))

C#

using System;

namespace Fib

{

    public class GFG

    {

        static int Fib(int n)

        {

            int a = 0, b = 1, c = 0;

            

            

            if (n == 0) return a;

    

            for (int i = 2; i <= n; i++)

            {

                c = a + b;

                a = b;

                b = c;

            }

    

            return b;

        }

        

    

    public static void Main(string[] args)

        {

            

            int n = 9;

            Console.Write("{0} ", Fib(n));

        }

    }

}

PHP

<?php

function fib( $n)

{

    $a = 0;

    $b = 1;

    $c;

    $i;

    if( $n == 0)

        return $a;

    for($i = 2; $i <= $n; $i++)

    {

        $c = $a + $b;

        $a = $b;

        $b = $c;

    }

    return $b;

}

$n = 9;

echo fib($n);

?>

Javascript

<script>

function fib(n)

{

    let a = 0, b = 1, c, i;

    if( n == 0)

        return a;

    for(i = 2; i <= n; i++)

    {

    c = a + b;

    a = b;

    b = c;

    }

    return b;

}

    let n = 9;

    

    document.write(fib(n));

</script>

Complejidad del tiempo:Sobre)
Espacio extra: O (1)

Método 4 (usando el poder de la matriz {{1, 1}, {1, 0}})
Este otro O (n) que se basa en el hecho de que si multiplicamos n veces la matriz M = {{1,1}, {1,0}} a sí misma (en otras palabras, calculamos la potencia (M, n)), entonces obtenemos el (n + 1) número de Fibonacci como el elemento en la fila y columna (0, 0) en la matriz resultante.
La representación matricial da la siguiente expresión cerrada para los números de Fibonacci:

fibonaccimatrix

C ++

#include<bits/stdc++.h>

using namespace std;

void multiply(int F[2][2], int M[2][2]);

void power(int F[2][2], int n);

int fib(int n)

{

    int F[2][2] = { { 1, 1 }, { 1, 0 } };

    

    if (n == 0)

        return 0;

        

    power(F, n - 1);

    

    return F[0][0];

}

void multiply(int F[2][2], int M[2][2])

{

    int x = F[0][0] * M[0][0] +

            F[0][1] * M[1][0];

    int y = F[0][0] * M[0][1] +

            F[0][1] * M[1][1];

    int z = F[1][0] * M[0][0] +

            F[1][1] * M[1][0];

    int w = F[1][0] * M[0][1] +

            F[1][1] * M[1][1];

    

    F[0][0] = x;

    F[0][1] = y;

    F[1][0] = z;

    F[1][1] = w;

}

void power(int F[2][2], int n)

{

    int i;

    int M[2][2] = { { 1, 1 }, { 1, 0 } };

    

    

    

    for(i = 2; i <= n; i++)

        multiply(F, M);

}

int main()

{

    int n = 9;

    

    cout << " " <<  fib(n);

    

    return 0;

}

C

#include <stdio.h>

  

void multiply(int F[2][2], int M[2][2]);

  

  

  

void power(int F[2][2], int n);

int fib(int n)

{

  int F[2][2] = {{1,1},{1,0}};

  if (n == 0)

      return 0;

  power(F, n-1);

  return F[0][0];

}

void multiply(int F[2][2], int M[2][2])

{

  int x =  F[0][0]*M[0][0] + F[0][1]*M[1][0];

  int y =  F[0][0]*M[0][1] + F[0][1]*M[1][1];

  int z =  F[1][0]*M[0][0] + F[1][1]*M[1][0];

  int w =  F[1][0]*M[0][1] + F[1][1]*M[1][1];

  F[0][0] = x;

  F[0][1] = y;

  F[1][0] = z;

  F[1][1] = w;

}

void power(int F[2][2],

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

apple touch icon@2

control de versiones – ¿Cuál es la diferencia entre ‘git pull’ y ‘git fetch’?

edit

Langostino vs camarón: diferencia y comparación