Portfolio
Fibonacci_Tribonacci_And_Friends
/*If you have completed the Tribonacci, you would know by now that mister Fibonacci has at least a
bigger brother. If not, give it a quick look to get how things work.
Well, time to expand the family a little more: think of a Quadribonacci starting with a signature of 4 elements
and each following element is the sum of the 4 previous, a Pentabonacci (well Cinquebonacci would probably sound
a bit more italian, but it would also sound really awful) with a signature of 5 elements and each following element
is the sum of the 5 previous, and so on.
Well, guess what? You have to build a Xbonacci function that takes a signature of X elements - and remember each
next element is the sum of the last X elements - and returns the first n elements of the so seeded sequence.
xbonacci {1,1,1,1} 10 = {1,1,1,1,4,7,13,25,49,94}
xbonacci {0,0,0,0,1} 10 = {0,0,0,0,1,1,2,4,8,16}
xbonacci {1,0,0,0,0,0,1} 10 = {1,0,0,0,0,0,1,2,3,6}
xbonacci {1,1} produces the Fibonacci sequence
*/
using namespace std;
std::vector<int> xbonacci(std::vector<int> signature, int n)
{
std::vector<int> suma;
int const siz = signature.size();
suma.resize(siz);
int sum = 0;
if(n ==0)
suma.resize(0);
else {
for (size_t t = 0; t < (unsigned)siz ; t++) {
suma[t] = signature[t]; }
if(siz>n) suma.erase(suma.end()-1);
for (int w = 0; w < n-siz ; w++) {
for (size_t i = w; i < suma.size(); i++)
{
sum += suma[i];
}
suma.push_back(sum);
sum = 0;
}
}
return suma;
}
