Metoda sprawdzenia, czy rok jest przestępny (pomoc przy rekurencji)

0

Metoda sprawdzenia, czy rok jest przestępny wygląda następująco:
F(1) = 0
F(rok) = (a*F(rok-1)+b+rok) mod m, gdzie a, b i m to wybrane przez scenarzystów parametry.

Jeśli wartość powyższej funkcji dla wybranego roku przekroczy próg (również wymyślony przez scenarzystów), to rok jest przestępny.

Zakładamy, że pierwszego dnia pierwszego miesiąca pierwszego roku mamy pierwszy dzień tygodnia. Dodatkowo obliczenia rozpoczynamy od roku 1

jak zapisac ta funkcje za pomoca rekurencji??

0

Przecież ona jest zapisana za pomocą rekurencji o_O

0

moze zle sie wyrazilem, jak ta funkcje zapisac za pomoca kodu??

0

if, %, return reszta dokładnie tak jak we wzorze.

2

Jak to jak?

if (rok==1) return 0;
else return (a*f(rok-1)+b+rok)%m;
1

Lepiej już tak:

return rok>1?(a*f(rok-1)+b+rok)%m:0;
0

w linijce : else return (a*f(rok-1)+b+rok)%m; - rok-1 wywala blad

1

OMG, szkoda słów. Skoro twoja funkcja f() ma więcej niz jeden parametr to pozostałe też musisz przekazać...

else return (a*f(rok-1,a,b,m)+b+rok)%m;
0

no super, a jakis pomysl zeby to zapisac iteracyjnie??

0

Liczysz dla każdego roku od roku 1 do maksymalnie potrzebnego roku.

   unsigned Ymax=1,F=0,a=4,b=2,m=20;
   while(Ymax<=Y)
     {
      cout<<"Y="<<Ymax<<" F="<<F<<endl;
      F=(a*F+b+Ymax)%m;
      ++Ymax;
     }

1 użytkowników online, w tym zalogowanych: 0, gości: 1