@@ -11,17 +11,56 @@ public class Fibonacci {
1111 TASK
1212 Fibonacci 를 계산하는 함수를 작성한다.
1313 */
14+
1415 @ Test
1516 public void test () {
16- assertThat (calcFibo (5 ), is (5 ));
17- assertThat (calcFibo (6 ), is (8 ));
18- assertThat (calcFibo (7 ), is (13 ));
17+
18+ assertThat (calcFiboByFor (5 ), is (5 ));
19+ assertThat (calcFiboByFor (6 ), is (8 ));
20+ assertThat (calcFiboByFor (7 ), is (13 ));
21+
22+ assertThat (calcFiboByRec (5 ), is (5 ));
23+ assertThat (calcFiboByRec (6 ), is (8 ));
24+ assertThat (calcFiboByRec (7 ), is (13 ));
25+
26+ assertThat (fiboByDp (5 ), is (5 ));
27+ assertThat (fiboByDp (6 ), is (8 ));
28+ assertThat (fiboByDp (7 ), is (13 ));
1929 }
2030
21- public int calcFibo (int num ) {
22- if (num < 2 ) {
23- return num ;
31+ // Iteration version
32+ public int calcFiboByFor (int num ) {
33+ if (num < 0 ) return -1 ;
34+
35+ int curValue = 0 ;
36+ int prevValue = 1 ;
37+ int prevPrevValue = 0 ;
38+
39+ for (int i = 2 ; i <= num ; i ++) {
40+ curValue = prevValue +prevPrevValue ;
41+ prevPrevValue = prevValue ;
42+ prevValue = curValue ;
2443 }
25- return calcFibo (num - 1 ) + calcFibo (num - 2 );
44+ return curValue ;
45+ }
46+
47+ // Recursion version
48+ public int calcFiboByRec (int num ) {
49+ if (num < 0 ) return -1 ;
50+ if (num < 2 ) return num ;
51+ return calcFiboByRec (num - 1 ) + calcFiboByRec (num - 2 );
52+ }
53+
54+ // Dynamic Programming version
55+ public int fiboByDp (int num ) {
56+ return calcFibo (num , new int [num + 1 ]);
57+ }
58+
59+ private int calcFibo (int num , int [] cache ) {
60+ if (num < 2 ) return num ;
61+ if (cache [num ] != 0 ) return cache [num ];//in java, int[] is initialized by 0.
62+
63+ cache [num ] = calcFibo (num - 1 , cache ) + calcFibo (num - 2 , cache );
64+ return cache [num ];
2665 }
2766}
0 commit comments