Recursión de cola para Fibonacci

Escribe una función recursiva de cola para calcular el n-ésimo número de Fibonacci. 
Ejemplos: 
 

Input : n = 4
Output : fib(4) = 3

Input : n = 9
Output : fib(9) = 34

Requisitos previos: Recursividad de cola , números de Fibonacci
Una función recursiva es recursiva de cola cuando la llamada recursiva es lo último que ejecuta la función. 
 

Escribir una recursión de cola es un poco complicado. Para obtener la intuición correcta, primero observamos el enfoque iterativo de calcular el n-ésimo número de Fibonacci. 
 

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;
}

Aquí hay tres posibilidades relacionadas con n :- 
 

n == 0
n == 1
n > 1

Los dos primeros son triviales. Nos enfocamos en la discusión del caso cuando n > 1. 
En nuestro enfoque iterativo para n > 1, 
comenzamos con 
 

a = 0
b = 1

Para n-1 veces repetimos lo siguiente para el par ordenado (a, b) 
Aunque usamos c en un enfoque iterativo real, pero el objetivo principal era el siguiente: – 
 

(a, b) = (b, a+b)

Finalmente devolvemos b después de n-1 iteraciones.
Por lo tanto, repetimos lo mismo esta vez con el enfoque recursivo. Establecemos los valores por defecto 
 

a = 0
b = 1

Aquí llamaremos recursivamente a la misma función n-1 veces y, en consecuencia, cambiaremos los valores de a y b. 
Finalmente, regresa b.
Si es el caso de n == 0 O n == 1, ¡no debemos preocuparnos mucho!
Aquí está la implementación del código fibonacci recursivo de cola. 
 

C++

// Tail Recursive Fibonacci
// implementation
#include <iostream>
using namespace std;
 
// A tail recursive function to
// calculate n th fibonacci number
int fib(int n, int a = 0, int b = 1)
{
    if (n == 0)
        return a;
    if (n == 1)
        return b;
    return fib(n - 1, b, a + b);
}
 
// Driver Code
int main()
{
    int n = 9;
    cout << "fib(" << n << ") = "
         << fib(n) << endl;
    return 0;
}

Java

// Tail Recursive
// Fibonacci implementation
 
class GFG
{
    // A tail recursive function to
    // calculate n th fibonacci number
    static int fib(int n, int a, int b )
    {
         
        if (n == 0)
            return a;
        if (n == 1)
            return b;
        return fib(n - 1, b, a + b);
    }
     
    public static void main (String[] args)
    {
        int n = 9;
        System.out.println("fib(" + n +") = "+
                                 fib(n,0,1) );
    }
}

Python3

# A tail recursive function to
# calculate n th fibonacci number
def fib(n, a = 0, b = 1):
    if n == 0:
        return a
    if n == 1:
        return b
    return fib(n - 1, b, a + b);
 
# Driver Code
n = 9;
print("fib("+str(n)+") = "+str(fib(n)))

C#

// C# Program for Tail
// Recursive Fibonacci
using System;
 
class GFG
{
     
    // A tail recursive function to
    // calculate n th fibonacci number
    static int fib(int n, int a , int b )
    {
        if (n == 0)
            return a;
        if (n == 1)
            return b;
        return fib(n - 1, b, a + b);
    }
     
    // Driver Code
    public static void Main ()
    {
        int n = 9;
        Console.Write("fib(" + n +") = " +
                           fib(n, 0, 1) );
    }
}
 
// This code is contributed
// by nitin mittal.

PHP

<?php
// A tail recursive PHP function to
// calculate n th fibonacci number
function fib($n, $a = 0, $b = 1)
{
    if ($n == 0)
        return $a;
    if ($n == 1)
        return $b;
    return fib($n - 1, $b, $a + $b);
}
 
// Driver Code
$n = 9;
echo "fib($n) = " , fib($n);
return 0;
 
// This code is contributed by nitin mittal.
?>

Javascript

<script>
 
// A tail recursive Javascript function to
// calculate n th fibonacci number
 
function fib(n, a = 0, b = 1)
{
    if (n == 0){
        return a;
    }
    if (n == 1){
        return b;
    }
    return fib(n - 1, b, a + b);
}
 
// Driver Code
let n = 9;
document.write(`fib(${n}) =  ${fib(n)}`);
 
 
// This code is contributed by _saurabh_jaiswal.
 
</script>

Producción : 
 

fib(9) = 34

Análisis de Algoritmo 
 

Time Complexity: O(n)
Auxiliary Space : O(n)

Este artículo es una contribución de Pratik Chhajer . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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