File tree 2 files changed +34
-0
lines changed
src/algorithms/math/fibonacci
2 files changed +34
-0
lines changed Original file line number Diff line number Diff line change
1
+ import fibonacciClosedForm from '../fibonacciClosedForm' ;
2
+
3
+ describe ( 'fibonacciClosedForm' , ( ) => {
4
+ it ( 'should calculate fibonacci correctly' , ( ) => {
5
+ expect ( fibonacciClosedForm ( 1 ) ) . toBe ( 1 ) ;
6
+ expect ( fibonacciClosedForm ( 2 ) ) . toBe ( 1 ) ;
7
+ expect ( fibonacciClosedForm ( 3 ) ) . toBe ( 2 ) ;
8
+ expect ( fibonacciClosedForm ( 4 ) ) . toBe ( 3 ) ;
9
+ expect ( fibonacciClosedForm ( 5 ) ) . toBe ( 5 ) ;
10
+ expect ( fibonacciClosedForm ( 6 ) ) . toBe ( 8 ) ;
11
+ expect ( fibonacciClosedForm ( 7 ) ) . toBe ( 13 ) ;
12
+ expect ( fibonacciClosedForm ( 8 ) ) . toBe ( 21 ) ;
13
+ expect ( fibonacciClosedForm ( 20 ) ) . toBe ( 6765 ) ;
14
+ expect ( fibonacciClosedForm ( 30 ) ) . toBe ( 832040 ) ;
15
+ expect ( fibonacciClosedForm ( 50 ) ) . toBe ( 12586269025 ) ;
16
+ expect ( fibonacciClosedForm ( 70 ) ) . toBe ( 190392490709135 ) ;
17
+ expect ( fibonacciClosedForm ( 71 ) ) . toBe ( 308061521170129 ) ;
18
+ expect ( fibonacciClosedForm ( 72 ) ) . toBe ( 498454011879264 ) ;
19
+ expect ( fibonacciClosedForm ( 73 ) ) . toBe ( 806515533049393 ) ;
20
+ expect ( fibonacciClosedForm ( 74 ) ) . toBe ( 1304969544928657 ) ;
21
+ expect ( fibonacciClosedForm ( 75 ) ) . toBe ( 2111485077978050 ) ;
22
+ } ) ;
23
+ } ) ;
Original file line number Diff line number Diff line change
1
+ /**
2
+ * Calculate fibonacci number at specific position using closed form function.
3
+ *
4
+ * @param n n-th number of fibonacci sequence (must be number from 1(inclusive) to 75(inclusive))
5
+ * @return {number }
6
+ */
7
+ export default function fibonacciClosedForm ( n ) {
8
+ const sqrt5 = Math . sqrt ( 5 ) ;
9
+ const phi = ( 1 + sqrt5 ) / 2 ;
10
+ return Math . floor ( ( phi ** n ) / sqrt5 + 0.5 ) ;
11
+ }
You can’t perform that action at this time.
0 commit comments