Robie zadania z pewnej olimpiady programistycznej i mam problem, nie potrafie zrozumieć tego wyrażenia:
Mógłby mi ktoś podpowiedzieć, czy tu raczej mam się sam domyśleć jak to sie liczy czy raczej coś trzeba na ten temat wiedzieć.
Robie zadania z pewnej olimpiady programistycznej i mam problem, nie potrafie zrozumieć tego wyrażenia:
Mógłby mi ktoś podpowiedzieć, czy tu raczej mam się sam domyśleć jak to sie liczy czy raczej coś trzeba na ten temat wiedzieć.
przykladow, dla a0=0 i a,,1, = 1:
a2 = a1 + a2 = 1 + 0 = 1 (n = 2, czyli jest parzyste)
a3 = a2 - a1 = 1 - 1 = 0
...
Może ja pokaże całe zadanie XD
Wzór można mocno uprościć, dla n nieparzystych an = an-3.
Poza tym, niewiele Ci pomogę, bo nie mogę sobie wyobrazić czego można nie rozumieć w tym wzorze.
masz DOKŁADNIE napisany algorytm rekurencyjny na n-ty wyraz ciągu. W czym jest problem?
Dobra już wiem o co chodzi XD popatrzyłem na przykłady pokazane na tej stronie i już wiem. http://www.algorytm.edu.pl/rekurencja-zadania/75-n-ty-wyraz-ciagu.html :P
Zapewne nie rozumiesz rekurencji..
Przykład w c++
int function(int n)
{
int liczba;
if(n == 0)
{
liczba = 2;
}
else if(n == 1)
{
liczba = 3;
}
else
{
if(n % 2 == 0)
{
liczba = function(n - 1) + function(n - 2);
}
else
{
//liczba = function(n - 1) - function(n - 2);
liczba = function(n - 3); // uproszczenie, które jest bardzo przydatne w przypadku rekurencji
}
}
return liczba;
}
Moim zdaniem, pomysł użycia rekurencji jest w tym zadaniu absurdalny. Ciąg (pierwsze 76 wyrazów) należy stablicować.
#include<stdio.h>
int liczby[76];
int wyraz(int indeks)
{
return liczby[indeks];
}
int main()
{
liczby[0] = 2;
liczby[1] = 3;
for(int i=2;i<76;i++)
{
if(i % 2 == 0)
{
liczby[i] = liczby[i-1]+liczby[i-2];
}
else
{
liczby[i] = liczby [i-3];
}
}
//dla kontroli
for(int i=0;i<76;i++)
{
printf("%d\n",wyraz(i));
}
return 0;
}
Wariant anty-rekurencyjny (koszt pamięci sprowadzony do stałego):
#include<stdio.h>
#define N 76
int main()
{
int liczba_n;
int liczba_n2 = 2;
int liczba_n1 = 3;
if (N < 1)
liczba_n = liczba_n2;
else if (N == 1)
liczba_n = liczba_n1;
else
for(int i=2;i<N;i++)
{
if(i % 2 == 0)
{
liczba_n = liczba_n1 + liczba_n2;
}
else
{
liczba_n = liczba_n1 - liczba_n2;
}
liczba_n2 = liczba_n1;
liczba_n1 = liczba_n;
printf("%d\n",liczba_n);
}
return 0;
}