Skip to content

Commit 2205c4f

Browse files
feat: fibonacci using dynamic programming (#223)
1 parent 8ea5c8c commit 2205c4f

File tree

3 files changed

+58
-2
lines changed

3 files changed

+58
-2
lines changed

README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1330,6 +1330,24 @@ public class FibonacciSnippet {
13301330
}
13311331
}
13321332

1333+
/**
1334+
* Fibonacci series using dynamic programming. Works for larger ns as well.
1335+
*
1336+
* @param n given number
1337+
* @return fibonacci number for given n
1338+
*/
1339+
public static int fibonacciBig(int n) {
1340+
int previous = 0;
1341+
int current = 1;
1342+
for (int i = 0; i < n - 1; i++) {
1343+
int t = previous + current;
1344+
previous = current;
1345+
current = t;
1346+
}
1347+
1348+
return current;
1349+
}
1350+
13331351
/**
13341352
* Example of what an iterative implementation of Fibonacci looks like.
13351353
*

src/main/java/math/FibonacciSnippet.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* MIT License
33
*
4-
* Copyright (c) 2017-2022 Ilkka Seppälä
4+
* Copyright (c) 2017-2024 Ilkka Seppälä
55
*
66
* Permission is hereby granted, free of charge, to any person obtaining a copy
77
* of this software and associated documentation files (the "Software"), to deal
@@ -46,6 +46,24 @@ public static int fibonacci(int n) {
4646
}
4747
}
4848

49+
/**
50+
* Fibonacci series using dynamic programming. Works for larger ns as well.
51+
*
52+
* @param n given number
53+
* @return fibonacci number for given n
54+
*/
55+
public static int fibonacciBig(int n) {
56+
int previous = 0;
57+
int current = 1;
58+
for (int i = 0; i < n - 1; i++) {
59+
int t = previous + current;
60+
previous = current;
61+
current = t;
62+
}
63+
64+
return current;
65+
}
66+
4967
/**
5068
* Example of what an iterative implementation of Fibonacci looks like.
5169
*

src/test/java/math/FibonacciSnippetTest.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* MIT License
33
*
4-
* Copyright (c) 2017-2022 Ilkka Seppälä
4+
* Copyright (c) 2017-2024 Ilkka Seppälä
55
*
66
* Permission is hereby granted, free of charge, to any person obtaining a copy
77
* of this software and associated documentation files (the "Software"), to deal
@@ -51,6 +51,26 @@ void testFibonacci() {
5151
assertEquals(55, FibonacciSnippet.fibonacci(10));
5252
}
5353

54+
/**
55+
* Tests for {@link FibonacciSnippet#fibonacciBig(int)}.
56+
*/
57+
@Test
58+
void testFibonacciBig() {
59+
assertEquals(0, FibonacciSnippet.fibonacci(0));
60+
assertEquals(1, FibonacciSnippet.fibonacci(1));
61+
assertEquals(1, FibonacciSnippet.fibonacci(2));
62+
assertEquals(2, FibonacciSnippet.fibonacci(3));
63+
assertEquals(3, FibonacciSnippet.fibonacci(4));
64+
assertEquals(5, FibonacciSnippet.fibonacci(5));
65+
assertEquals(8, FibonacciSnippet.fibonacci(6));
66+
assertEquals(13, FibonacciSnippet.fibonacci(7));
67+
assertEquals(21, FibonacciSnippet.fibonacci(8));
68+
assertEquals(34, FibonacciSnippet.fibonacci(9));
69+
assertEquals(55, FibonacciSnippet.fibonacci(10));
70+
assertEquals(6765, FibonacciSnippet.fibonacci(20));
71+
assertEquals(102334155, FibonacciSnippet.fibonacci(40));
72+
}
73+
5474
/**
5575
* Tests for {@link FibonacciSnippet#iterativeFibonacci(int)}.
5676
*/

0 commit comments

Comments
 (0)