Napisałem mały algorytm do zadanka na spoju, wszystko śmiga dopóki n<3550 (+/-). dalej następuje przepełnienie stosu. Prawdę mówiąc spędziłem już dobrych kilka godzin na próbach obejścia tego problemu, ale nic z tego. Nienawidzę się poddawać, ale na prawdę nie mam już pomysłów. Da się jeszcze jakoś uratować ten kod? czy najlepiej wyrzucić go do śmieci, przemyśleć od nowa i z całkiem innej strony podejść do niego?
#include <iostream>
using namespace std;
unsigned long long fibW = 0;
unsigned long long fibM = 1;
int k = 1;
unsigned long long fib(int n)
{
unsigned long long help;
help = fibM;
fibM = fibW;
fibW = help + fibM;
if (fibW >= 1000000007)
{
fibW = fibW % 1000000007;
}
if (n == 1 || n == 2) return fibW;
else if(n == k)
{
return fibW;
}
else
{
k++;
return fib(n);
}
}
int main()
{
unsigned long long wynik[100];
int ilosc; cin >> ilosc;
for (int i = 0; i < ilosc; i++)
{
int n; cin >> n;
wynik[i] = fib(n);
fibM = 1;
k = 1;
fibW = 0;
}
for (int i = 0; i < ilosc; i++)
{
cout << wynik[i]<<endl;
}
}