mirror of
https://bitbucket.org/Mattrixwv/my-classes.git
synced 2025-12-06 18:23:57 -05:00
Added getAllFib function to return a vector of Fibonacci numbers
This commit is contained in:
@@ -64,12 +64,16 @@ bool isFound(T num, std::vector<T> list);
|
|||||||
//It can however be used with num if you want the first num characters to be stationary
|
//It can however be used with num if you want the first num characters to be stationary
|
||||||
std::vector<std::string> getPermutations(std::string master, int num = 0);
|
std::vector<std::string> getPermutations(std::string master, int num = 0);
|
||||||
//These functions return the numth Fibonacci number
|
//These functions return the numth Fibonacci number
|
||||||
uint64_t getFib(uint64_t num);
|
template <class T>
|
||||||
|
T getFib(T num);
|
||||||
//In order to use this functionality you must use the -DNEEDGMP flag in your compiler
|
//In order to use this functionality you must use the -DNEEDGMP flag in your compiler
|
||||||
//You must also link both libgmpxx and libgmp
|
//You must also link both libgmpxx and libgmp
|
||||||
#ifdef NEEDGMP
|
#ifdef NEEDGMP
|
||||||
mpz_class getMpzFib(uint64_t num);
|
mpz_class getMpzFib(uint64_t num);
|
||||||
#endif //NEEDGMP
|
#endif //NEEDGMP
|
||||||
|
//This function returns a vector that includes all Fibonacci numbers <= num
|
||||||
|
template<class T>
|
||||||
|
std::vector<T> getAllFib(const T num);
|
||||||
//This is a function that performs a bubble sort on a vector
|
//This is a function that performs a bubble sort on a vector
|
||||||
template<class T>
|
template<class T>
|
||||||
bool bubbleSort(std::vector<T> nums);
|
bool bubbleSort(std::vector<T> nums);
|
||||||
@@ -277,21 +281,23 @@ std::vector<std::string> getPermutations(std::string master, int num){
|
|||||||
return perms;
|
return perms;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t getFib(uint64_t num){
|
template <class T>
|
||||||
|
T getFib(T num){
|
||||||
//Make sure the number is within bounds
|
//Make sure the number is within bounds
|
||||||
if(num <= 2){
|
if(num <= 2){
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
//Setup the variables
|
//Setup the variables
|
||||||
uint64_t fib = 0;
|
T fib = 0;
|
||||||
uint64_t tempNums[3];
|
T tempNums[3];
|
||||||
tempNums[0] = tempNums[1] = 1;
|
tempNums[0] = tempNums[1] = 1;
|
||||||
|
|
||||||
//Do the calculation
|
//Do the calculation
|
||||||
for(uint64_t cnt = 2;cnt < num;++cnt){
|
for(T cnt = 2;(cnt < num) && (tempNums[(cnt - 1) % 3] >= tempNums[(cnt - 2) % 3]);++cnt){
|
||||||
tempNums[cnt % 3] = tempNums[(cnt + 1) % 3] + tempNums[(cnt + 2) % 3];
|
tempNums[cnt % 3] = tempNums[(cnt + 1) % 3] + tempNums[(cnt + 2) % 3];
|
||||||
}
|
}
|
||||||
fib = tempNums[(num - 1) % 3]; //Transfer the answer to permanent variable. -1 to account for the offset of starting at 0
|
fib = tempNums[(num - 1) % 3]; //Transfer the answer to permanent variable. -1 to account for the offset of starting at 0
|
||||||
|
|
||||||
return fib;
|
return fib;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,6 +327,35 @@ mpz_class getMpzFib(uint64_t num){
|
|||||||
}
|
}
|
||||||
#endif //NEEDGMP
|
#endif //NEEDGMP
|
||||||
|
|
||||||
|
//This function returns a vector that includes all Fibonacci numbers <= num
|
||||||
|
template<class T>
|
||||||
|
std::vector<T> getAllFib(const T num){
|
||||||
|
std::vector<T> fibList;
|
||||||
|
//Make sure the number is within bounds
|
||||||
|
if(num <= 1){
|
||||||
|
fibList.push_back(1);
|
||||||
|
return fibList;
|
||||||
|
}
|
||||||
|
else{ //Make sure to add the first 2 elements
|
||||||
|
fibList.push_back(1);
|
||||||
|
fibList.push_back(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Setup the variables
|
||||||
|
T fib = 0;
|
||||||
|
T tempNums[3];
|
||||||
|
tempNums[0] = tempNums[1] = 1;
|
||||||
|
|
||||||
|
//Do the calculation and add each number to the vector
|
||||||
|
for(T cnt = 2;(tempNums[(cnt - 1) % 3] < num) && (tempNums[(cnt - 1) % 3] >= tempNums[(cnt - 2) % 3]);++cnt){
|
||||||
|
tempNums[cnt % 3] = tempNums[(cnt + 1) % 3] + tempNums[(cnt + 2) % 3];
|
||||||
|
fibList.push_back(tempNums[cnt % 3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Return the vector that contains all of the Fibonacci numbers
|
||||||
|
return fibList;
|
||||||
|
}
|
||||||
|
|
||||||
//This is a function that performs a bubble sort on a vector
|
//This is a function that performs a bubble sort on a vector
|
||||||
template<class T>
|
template<class T>
|
||||||
bool bubbleSort(std::vector<T> nums){
|
bool bubbleSort(std::vector<T> nums){
|
||||||
|
|||||||
Reference in New Issue
Block a user