Écrivez une fonction récursive de queue pour calculer le n-ième nombre de Fibonacci.
Exemples :
propriétés acides dans les dbms
Input : n = 4 Output : fib(4) = 3 Input : n = 9 Output : fib(9) = 34
Pré-requis : Récursion de la queue Numéros de Fibonacci
Une fonction récursive est queue récursive lorsque l'appel récursif est la dernière chose exécutée par la fonction.
Écrire une récursion de queue est un peu délicat. Pour avoir une intuition correcte, examinons d’abord l’approche itérative de calcul du n-ième nombre 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; }
Ici, il y a trois possibilités liées à n :-
n == 0
n == 1
n > 1
Les deux premiers sont triviaux. Nous nous concentrons sur la discussion du cas où n > 1.
Dans notre approche itérative pour n > 1
Nous commençons par
a = 0 b = 1
Pour n-1 fois, nous répétons ce qui suit pour la paire ordonnée (ab)
Bien que nous ayons utilisé c dans une approche itérative réelle, l'objectif principal était le suivant : -
(a b) = (b a+b)
Nous renvoyons finalement b après n-1 itérations.
Nous répétons donc la même chose cette fois avec l’approche récursive. Nous définissons les valeurs par défaut
a = 0 b = 1
Ici, nous appellerons récursivement la même fonction n-1 fois et modifierons en conséquence les valeurs de a et b.
Enfin, revenez b.
Si c'est le cas n == 0 OU n == 1, nous n'avons pas à nous inquiéter beaucoup !
Voici l'implémentation du code Fibonacci récursif de queue.
// Tail Recursive Fibonacci // implementation #include 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(n01) ); } }
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 // 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>
Sortir :
fib(9) = 34
Analyse de l'algorithme
surcharge de méthode
Time Complexity: O(n) Auxiliary Space : O(n)