Skip to content

Commit 917c05d

Browse files
committed
feature: dp pattern 1 fibonacci, tribonacci added
1 parent 94caa26 commit 917c05d

File tree

8 files changed

+218
-0
lines changed

8 files changed

+218
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#pragma once
2+
#include<vector>
3+
using namespace std;
4+
5+
/*
6+
Pattern 1
7+
Linear Recurrence
8+
9+
Description
10+
Print the n'th Fibonacci number.
11+
12+
*/
13+
14+
namespace FibonacciNumber
15+
{
16+
class DynamicProgramming
17+
{
18+
private:
19+
public:
20+
int RecursiveNthFibonacci(int n);
21+
int DpNthFibonacci(int n);
22+
};
23+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#pragma once
2+
#include<vector>
3+
using namespace std;
4+
5+
/*
6+
Pattern 1
7+
Linear Recurrence
8+
9+
Description
10+
Print the n'th Tribonacci number.
11+
12+
*/
13+
14+
namespace TribonacciNumber
15+
{
16+
class DynamicProgramming
17+
{
18+
private:
19+
public:
20+
int RecursiveNthTribonacci(int n);
21+
int DpNthTribonacci(int n);
22+
};
23+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#include "../../include/0005_DynamicProgramming/0001_FibonacciNumber.h"
2+
3+
namespace FibonacciNumber
4+
{
5+
int DynamicProgramming::RecursiveNthFibonacci(int n)
6+
{
7+
if (n <= 1)
8+
{
9+
return n;
10+
}
11+
12+
return this->RecursiveNthFibonacci(n - 1) + this->RecursiveNthFibonacci(n - 2);
13+
}
14+
15+
int DynamicProgramming::DpNthFibonacci(int n)
16+
{
17+
vector<int> dp(n + 1, 0);
18+
dp[0] = 0;
19+
dp[1] = 1;
20+
21+
for (int i = 2; i <= n; i++)
22+
{
23+
dp[i] = dp[i - 1] + dp[i - 2];
24+
}
25+
26+
return dp[n];
27+
}
28+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include "../../include/0005_DynamicProgramming/0002_TribonacciNumber.h"
2+
3+
namespace TribonacciNumber
4+
{
5+
int DynamicProgramming::RecursiveNthTribonacci(int n)
6+
{
7+
if (n == 0 || n == 1 || n == 2)
8+
{
9+
return 0;
10+
}
11+
12+
if (n == 3)
13+
{
14+
return 1;
15+
}
16+
17+
return this->RecursiveNthTribonacci(n - 1) + this->RecursiveNthTribonacci(n - 2) + this->RecursiveNthTribonacci(n - 3);
18+
}
19+
20+
int DynamicProgramming::DpNthTribonacci(int n)
21+
{
22+
vector<int> dp(n, 0);
23+
dp[0] = dp[1] = 0;
24+
dp[2] = 1;
25+
26+
for (int i = 3; i < n; i++)
27+
{
28+
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3];
29+
}
30+
31+
return dp[n - 1];
32+
}
33+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Specify the source files
2+
set(0005DYNAMICPROGRAMMING_SOURCES
3+
0001_FibonacciNumber.cc
4+
0002_TribonacciNumber.cc
5+
6+
)
7+
8+
# Create a library target
9+
add_library(0005DYNAMICPROGRAMMING ${0005DYNAMICPROGRAMMING_SOURCES})
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include<gtest/gtest.h>
2+
#include "../../include/0005_DynamicProgramming/0001_FibonacciNumber.h"
3+
using namespace std;
4+
5+
namespace FibonacciNumber
6+
{
7+
TEST(FibonacciNumber, RecursiveTest)
8+
{
9+
// Arrange
10+
DynamicProgramming dp;
11+
int n = 5;
12+
int expectedFib = 5;
13+
14+
// Act
15+
int actualFib = dp.RecursiveNthFibonacci(n);
16+
17+
// Assert
18+
ASSERT_EQ(expectedFib, actualFib);
19+
}
20+
21+
TEST(FibonacciNumber, DpTest)
22+
{
23+
// Arrange
24+
DynamicProgramming dp;
25+
int n = 5;
26+
int expectedFib = 5;
27+
28+
// Act
29+
int actualFib = dp.DpNthFibonacci(n);
30+
31+
// Assert
32+
ASSERT_EQ(expectedFib, actualFib);
33+
}
34+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#include<gtest/gtest.h>
2+
#include "../../include/0005_DynamicProgramming/0002_TribonacciNumber.h"
3+
using namespace std;
4+
5+
namespace TribonacciNumber
6+
{
7+
TEST(TribonacciNumber, RecursiveTest)
8+
{
9+
// Arrange
10+
DynamicProgramming dp;
11+
int n = 5;
12+
int expectedFib = 2;
13+
14+
// Act
15+
int actualFib = dp.RecursiveNthTribonacci(n);
16+
17+
// Assert
18+
ASSERT_EQ(expectedFib, actualFib);
19+
}
20+
21+
TEST(TribonacciNumber, DpTest)
22+
{
23+
// Arrange
24+
DynamicProgramming dp;
25+
int n = 10;
26+
int expectedFib = 44;
27+
28+
// Act
29+
int actualFib = dp.DpNthTribonacci(n);
30+
31+
// Assert
32+
ASSERT_EQ(expectedFib, actualFib);
33+
}
34+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
cmake_policy(SET CMP0135 NEW)
2+
3+
include(FetchContent)
4+
FetchContent_Declare(
5+
googletest
6+
URL https://github.com/google/googletest/archive/03597a01ee50ed33e9dfd640b249b4be3799d395.zip
7+
)
8+
9+
# For Windows: Prevent overriding the parent project's compiler/linker settings
10+
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
11+
FetchContent_MakeAvailable(googletest)
12+
13+
enable_testing()
14+
15+
add_executable(
16+
0005DynamicProgrammingTests
17+
0001_FibonacciNumberTest.cc
18+
0002_TribonacciNumberTest.cc
19+
20+
)
21+
22+
target_link_libraries(
23+
0005DynamicProgrammingTests
24+
GTest::gtest_main
25+
0005DYNAMICPROGRAMMING
26+
)
27+
28+
# Add .clang-tidy configuration to this library.
29+
if(CLANG_TIDY_EXE)
30+
set_target_properties(0005DYNAMICPROGRAMMING PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_COMMAND}")
31+
endif()
32+
33+
include(GoogleTest)
34+
gtest_discover_tests(0005DynamicProgrammingTests DISCOVERY_TIMEOUT 30)

0 commit comments

Comments
 (0)