Fibonacci optimized using binet's formula (#3728)

* Fibonacci optimized using binet's formula

* Update Fibonacci.java

* Update Fibonacci.java

* updated changes

Co-authored-by: Debasish Biswas <debasishbsws.abc@gmail.com>
This commit is contained in:
Aayush2111 2022-10-30 09:26:08 +05:30 committed by GitHub
parent 8efc71e609
commit 23eec39a29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -19,6 +19,7 @@ public class Fibonacci {
System.out.println(fibMemo(n)); System.out.println(fibMemo(n));
System.out.println(fibBotUp(n)); System.out.println(fibBotUp(n));
System.out.println(fibOptimized(n)); System.out.println(fibOptimized(n));
System.out.println(fibBinet(n));
sc.close(); sc.close();
} }
@ -90,5 +91,21 @@ public class Fibonacci {
res = next; res = next;
} }
return res; return res;
}
} }
/**
* We have only defined the nth Fibonacci number in terms of the two before it. Now, we will look at Binet's formula to calculate the nth Fibonacci number in constant time.
* The Fibonacci terms maintain a ratio called golden ratio denoted by Φ, the Greek character pronounced phi'.
* First, let's look at how the golden ratio is calculated: Φ = ( 1 + 5 )/2 = 1.6180339887...
* Now, let's look at Binet's formula: Sn = Φⁿ( Φ)/5
* We first calculate the squareRootof5 and phi and store them in variables. Later, we apply Binet's formula to get the required term.
* Time Complexity will be O(1)
*/
public static int fibBinet(int n) {
double squareRootOf5 = Math.sqrt(5);
double phi = (1 + squareRootOf5)/2;
int nthTerm = (int) ((Math.pow(phi, n) - Math.pow(-phi, -n))/squareRootOf5);
return nthTerm;
}
}