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:
parent
8efc71e609
commit
23eec39a29
@ -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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user