• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Rekurencja - problem ze zrozumieniem

Object Storage Arubacloud
0 głosów
2,047 wizyt
pytanie zadane 16 września 2015 w Algorytmy przez emSon Stary wyjadacz (10,480 p.)
Czesc. Mam problem z pojeciem myslenia rekurencyjnego. Wiem co to jest, na czym to polega , lecz nie potrafie sie przestawic na taki tok myslenia. Moglby ktos napisac pare przykladow w formie petli, a potem w rekursji? (w dowolnym jezyku) Podejrzewam , ze troche by mi to pomoglo. Dzieki.

7 odpowiedzi

+2 głosów
odpowiedź 5 października 2015 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Rekurencje można zrozumieć na różne sposoby. Ja przedstawie swój na podstawie silni:

int rekurencja ( int a ){
    if ( a ==  1 ) return 1;
    else return rekurencja ( a - 1 ) * a;
}

Zakładamy, że chcemy obliczyć silnie  z  5

Więc

rekurencja ( 5 ) = rekurencja ( 4 ) * 5   < - musze obliczyć  tą rekurencja ( 4 )

to odpalam ją  rekurencja( 4 ) =  rekurencja ( 3 ) * 4   <- teraz muszę obliczyć rekurencja ( 3 )

rekurencja ( 3 ) =  rekurencja ( 2 ) * 3

rekurencja ( 2 ) = rekurencja ( 1 ) * 2

rekurencja ( 1 ) = 1            <- wiemy ile wynosi ta funkcja (  pierwszy if )

Następnie program sobie wraca  z dołu do góry mając wyliczone rekurencja ( 1 ), rekurencja ( 2 ).. i podstawia wyniki. Mam nadzieję, że troszkę rozjaśniłem :).  Rekurencja to stosunkowo trudne zagadnienie i potrzeba na nie dużo czasu by zrozumieć, więc się nie przejmuj jak teraz nie ogarniasz
komentarz 5 października 2015 przez writen Nałogowiec (29,060 p.)
edycja 5 października 2015 przez writen
Twoja funkcja obliczająca silnię zawiera błąd.
komentarz 6 października 2015 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Tak bo nie uwzględniam a==0 ale mi bardziej chodziło o wyjaśnienie
+1 głos
odpowiedź 16 września 2015 przez jeremus Maniak (59,720 p.)
bardzo przystępnie przedstawił to Miroslaw Zelent ( jak wszystko zresztą ) - poszukaj takiego odcinka w kursie c albo c++ juz nie pamiętam
komentarz 16 września 2015 przez emSon Stary wyjadacz (10,480 p.)
nie zeby cos, ale jestesmy na jego forum i nie pytal bym sie o nic uprzednio nie obejrzawszy jego filmu o takiej tematyce ;) zrozumialem sama zasade dzialania tego, ale nie potrafie przekonwertowac nic z petli iteracyjnej na funkcje referencyjna. dlatego prosze o pare przykladow
+1 głos
odpowiedź 16 września 2015 przez event15 Szeryf (93,790 p.)
int silnia(int n) {
    if(n == 0) return 1;
    else return n * silnia(n-1);
}
int binary_search(int *tab, int x, int left, int right) {
    if(left == right) 
        if(tab[left] == x) return left;
        else return -1;
    else {
        int mid = (left + right)/2;
        if(tab[mid] == x) return mid;
        else 
            if (x < tab[mid]) return binary_search(tab, x, left, mid);
        else return binary_search(tab, x, left, right);
    }
}

 

komentarz 16 września 2015 przez emSon Stary wyjadacz (10,480 p.)
dzieki za przyklady, chociaz chodzilo mi o cos prostego a zapisanego najpierw np. w petli for, a potem w funkcji rekursyjnej ;)
+1 głos
odpowiedź 16 września 2015 przez Szykem2 Nałogowiec (29,510 p.)

Praktyczne każdy kod iteracyjny da sie zapisać rekurencyjnie np:

long long fib_it(int n) {
        int prev = 1, curr = 1, next = 1;
        for (int i = 3; i <= n; i++) {
           next = cur + prev;
           prev = cur;
           cur = next;
        }
        return next;
    }

long long fib_rec(int n) {
    if(n ==1 || n == 2) {
        return 1;
    }
    return fib_rec(n-1) + fib_rec(n-2);
}

Czasem używając algorytmu rekurencyjnego można coś zaprojektować w znacznie czytelniejszej formie. Jeśli jesteś ciekaw zobacz na czym polega programowanie dynamiczne i zoptymalizuj metodę rekurencyjną.

+1 głos
odpowiedź 16 września 2015 przez NoName Mądrala (5,640 p.)
ja polecam to ogarnąć na chyba najczęszczym i najlepiej znanym przykladzie czyli ciągu fiboncciego.
Ogarnij sobie go dobrze, spokojnie na kartce rozpisz kolejne elementy itd.
Potem popatrz na kod i powoli na spokojnie myśl co się w nim dzieje w danym momencie i dlaczego tak, a nie inaczej.
Może to proste i wyda Ci się głupie, ale myślę że pomoże. Jak zrozumiesz rekurencje dobrze na jedym przykładzie to potem już poleci.
+1 głos
odpowiedź 5 października 2015 przez writen Nałogowiec (29,060 p.)
Jakiś czas temu dodałem krótki wpis pokazujący obliczanie silni w sposób rekurencyjny.

http://codehunter.pl/rekurencja-w-programowaniu-obliczamy-silnie/

Może nie wyjaśniłem tego aż tak dogłębnie, ale myślę że komuś pomoże.
+1 głos
odpowiedź 6 października 2015 przez event15 Szeryf (93,790 p.)

Niedawno zobaczyłem świetny przykład na zrozumienie rekurencji:

  1. Przeczytaj punkt 2.
  2. Przeczytaj punkt 1.

Genialne devil

komentarz 6 października 2015 przez Strategiusz Dyskutant (9,220 p.)
To jest przykład zapętlonego "go to".
komentarz 6 października 2015 przez writen Nałogowiec (29,060 p.)
Świetny przykład od śmieszka google, to wpisanie w wyszukiwarce "rekurencja".

http://screenshu.com/static/uploads/temporary/i8/w7/mn/g8qqf3.jpg

Podobne pytania

+1 głos
4 odpowiedzi 504 wizyt
pytanie zadane 6 stycznia 2016 w C i C++ przez kacperoo7 Nowicjusz (200 p.)
0 głosów
2 odpowiedzi 196 wizyt
pytanie zadane 30 marca 2016 w C i C++ przez szymi666 Bywalec (2,020 p.)
0 głosów
3 odpowiedzi 3,968 wizyt
pytanie zadane 31 lipca 2015 w Algorytmy przez broda Początkujący (380 p.)

92,580 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...