logo

Halerekursion for Fibonacci

Skriv en rekursiv halefunktion til beregning af det n-te Fibonacci-tal. 
Eksempler:  
 

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


Forudsætninger: Halerekursion Fibonacci-tal
En rekursiv funktion er hale rekursiv når det rekursive kald er det sidste, der udføres af funktionen. 
 


Det er lidt vanskeligt at skrive en halerekursion. For at få den korrekte intuition ser vi først på den iterative tilgang til beregning af det n-te Fibonacci-tal. 
 



ipconfig til ubuntu
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; }


Her er der tre muligheder relateret til n:- 
 

n == 0


 

n == 1


 

n > 1


De to første er trivielle. Vi fokuserer på diskussion af sagen, når n > 1. 
I vores iterative tilgang til n > 1 
Vi starter med 
 

a = 0 b = 1


I n-1 gange gentager vi følgende for bestilt par (ab) 
Selvom vi brugte c i faktisk iterativ tilgang, men hovedformålet var som nedenfor: - 
 

js multiline streng
(a b) = (b a+b)


Vi returnerer endelig b efter n-1 iterationer.
Derfor gentager vi det samme denne gang med den rekursive tilgang. Vi indstiller standardværdierne 
 

a = 0 b = 1


Her vil vi rekursivt kalde den samme funktion n-1 gange og tilsvarende ændre værdierne af a og b. 
Kom endelig tilbage b.
Hvis det er tilfældet med n == 0 ELLER n == 1, behøver vi ikke bekymre os meget!
Her er implementering af hale rekursiv fibonacci-kode. 
 

C++
// 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> 

Output:  
 

fib(9) = 34


Analyse af algoritme 
 

softwaretest og typer
Time Complexity: O(n) Auxiliary Space : O(n)


 

Opret quiz