Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rekurencja na iterację proszę o pomoc

Ostatnio zmodyfikowano 2016-06-17 11:14
Autor Wiadomość
kargi191
Temat założony przez niniejszego użytkownika
Rekurencja na iterację proszę o pomoc
» 2016-06-16 08:38:14
Nie mogę sobie poradzić z przekształceniem tej funkcji na iterację:

int rekurencja(int a)
{
 if(a>3) return(rekurencja(a-1)-rekurencja(a-2));
 else return a;
}

Proszę was o pomoc

P-149169
darko202
» 2016-06-16 09:03:30
P-149172
kargi191
Temat założony przez niniejszego użytkownika
» 2016-06-16 09:14:09
To chyba nie to :(
P-149173
darko202
» 2016-06-16 09:49:56
jeśli dodasz "-" przed pierwszym wyrazem to "wypisz/wymaluj" Twój problem.




 
P-149174
kargi191
Temat założony przez niniejszego użytkownika
» 2016-06-16 10:01:29
No niby tak, ale w moim problemie dla liczb mniejszych od 3 funkcja po prostu zwraca liczbę a dla liczb większych od 3 zwraca wyraz ciągu [1 -2 -3 -1 2 3] powtarzając go co 6 liczb i nie wiem jak to się ma do fibonaciego

Dla przykładu wyniki
Dla a= 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
wynik  1,2,3,1,-2,-3,-1,2,3,1,-2,-3,-1,2,3,1

P-149176
carlosmay
» 2016-06-16 10:14:56
Cóż @darko202, nie zostaje nic innego, jak zaproponować przyjaźń z debuggerem. ;)
Przykład jak na tacy.
P-149177
darko202
» 2016-06-16 13:33:03
1.
>> Nie mogę sobie poradzić z przekształceniem tej funkcji na iterację
Wskazałem Ci przykład, który pokazuje jak przekształcić funkcję rekurencyjna na iterację
i dziwnym trafem jest to zbieżne z Twoja funkcją ("-").

podpowiedz (moim zdaniem) jest to tak z 90% szukanego rozwiązania.

2.
"dla liczb mniejszych od 3 funkcja po prostu zwraca liczbę"
w przykładzie tez tak jest - (to cześć Twojej pracy)

"dla liczb większych od 3 zwraca wyraz ciągu [1 -2 -3 -1 2 3] powtarzając go co 6 liczb"
powtarzający się "cykl" wynika tylko z tego układu danych - równania, które masz "iteracyjnie" zrealizować.
Dlatego w takich przypadkach nie można wykorzystasz np.
http://cpp0x.pl/kursy/Kurs-C++​/Poziom-1​/Warunek-wielokrotnego-wyboru-​switch-case​/17
bo nie byłoby to zgodne z duchem funkcji rekurencyjnych i treścią zadania "przekształcić".

Celem zadania jest nauczenie Cię jak  "przekształcić funkcję rekurencyjną na iterację". 

jest to fundament wykształcenia informatycznego, gdyż funkcje rekurencyjne mają wiele bardzo krytycznych wad, nie pozwalających z nich skorzystać. (poczytaj sobie o tym).

z drugiej strony są takie fajne "rozwiązanie niektórych problemów jest znacznie wygodniejsze".
 
3.
@carlosmay choć debagowanie to wspaniałe narzędzie programisty - moim zdaniem - nie rozwiązuje tego problemu.

I może denerwuje "podejście" do problemu przez @kargi191, ale najlepiej założyć, że
każdy kiedyś zaczynał - ja już dawno temu, Ty pewnie też - dlatego choć dziś czasami chciałoby się powiedzieć "rynce opadywują", to musimy pamiętać, aby odpowiedz nie była obrażająca/zniechecajaca dla pytającego.

zamieszczamy odpowiedzi dobrowolnie - dzieląc się tym co możemy z siebie dać, być może Oni kiedyś pomogą innym równie bezinteresownie.

4.
@kargi191 przez "podejście" rozumiem wrażenie postawy "zróbcie to za mnie". 
mam nadzieję, że zmienisz to, bo na forum nie akceptujemy takiej postawy.
Celem jest pomoc, ale oznacza to realizację zadania przez pytającego.

nie chcemy dawać "ryby", ale nauczyć pytającego "jak się łowi ryby".
  

  
P-149182
kargi191
Temat założony przez niniejszego użytkownika
» 2016-06-16 15:46:44
Przepraszam za to moje podejście ale naprawdę załamałem ręce, miałem zupełny brak pomysłów na to w głowie ale trochę ochłonąłem i odszedłem na chwilę od komputera po czym napisałem to i działa:

int iteracja(int a)
{
    if((a>3)&&(a>=0))
    {
    int tab[ a ];
    tab[0]=0;
    tab[1]=1;
    tab[2]=2;
    tab[3]=3;
    for(int i=4;i<=a;i++)
    {
        tab=tab[i-1]-tab[i-2];
    }
    return tab[ a ];
    }
    else return a;


}

Dzięki za podpowiedzi
Pozdrawiam

Ps: mój kod ma jakieś poważne wady ?
P-149183
« 1 » 2
  Strona 1 z 2 Następna strona