Witam, mam taki przedmiot na uczelni i czy ktoś może mi wytłumaczyć, czym się różni funkcja rekurencyjna od zwykłej funkcji?
Albo to pokazać na przykładzie jakiegoś prostego programu?
Ok, znalazłem coś takiego
spoiler start
int silnia (int liczba)
;
int sil;
if (liczba<0) return 0; /* wywołanie jest bezsensowne, zwracamy 0 jako kod błędu */
if (liczba==0 || liczba==1) return 1;
sil = liczba*silnia(liczba-1);
return sil;
;
spoiler stop
Rozumiem, że funkcja rekurencyjna to taka, która w wywołuje samą siebie w swoim ciele?
A to jest zwykła funkcja, bo nie wywołuje samej siebie, tylko zwraca wynik? ;d
spoiler start
int suma (int a, int b)
;
return a+b;
;
int main ()
;
int m = suma (4, 5);
printf ("4+5=%d\n", m);
return 0;
;
spoiler stop
Zawsze w takim momencie przypomina mi się rekurencyjna definicja rekurencji.
"Żeby zrozumieć rekurencję - trzeba zrozumieć rekurencję".
To właściwie wszystko - jak zrozumiesz, to drzwi programowania staną przed Tobą otworem :)
Tak, funkcja rekurencyjna to taka funkcja która wywołuje samą siebie.
@up Dobre :D
" odwoływanie się np. funkcji lub definicji do samej siebie."
Czyli to jednak wszystko, chyba już rozumiem, czemu facet powiedział, że funkcja nie jest rekurencyjna...
@Edit: Dobra, rekurencja to jeszcze nic, ale w sobotę Kolokwium z tego i jeszcze z list, a list w ogóle nie ogarniam.
@Edit 2: Mam jeszcze jedno pytanie, to jest prosta funkcja na sumę:
spoiler start
int suma (int a, int b)
return a+b;
spoiler stop
Czy da się ją zapisać rekurencyjnie?
Na sumę 2 liczb nie da się. Teoretycznie jakbyś liczby miał przechowywane w formie listy dałoby się, ale i tak byłoby to całkowicie bez sensu (szybciej i łatwiej zrobić to w pętli).
Co do list to czego nie rozumiesz? Może ktoś pomoże. Ja mogę spróbować pomóc ale na forum będę dopiero ok 17-18.
Wszystkiego.
Koleś pokazywał nam na tablicy:
xxx xxx xxx
To są 3 bloki.
Na początku head (taki mieliśmy wskaźnik) wskazywał na 1 element pierwszego bloku xxx
Żeby przejść do drugiego bloku xxx należało chyba wpisać:
head->next->prev
potem już tylko head->next oznaczało ostatni element 2 bloku xxx
A jak wskazać środkowy element?
Jakiś niezrozumiały ten przykład, pewnie coś pomyliłeś.
Co znaczy 3 bloki? To jest lista skłądająca się z trzech osobnych list 3 elementowych, czy jedna duża 9-elementowa lista? Czy może lista list?
Polecam zacząć od podstaw:
http://wazniak.mimuw.edu.pl/index.php?title=Metody_programowania_/Listy