Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Wprowadzenie do programowania

12.01.2016 13:22
1
Sony42
31
Pretorianin

Wprowadzenie do programowania

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?

12.01.2016 13:28
wysiak
2
odpowiedz
wysiak
95
tafata tofka
12.01.2016 13:40
maviozo
3
odpowiedz
maviozo
226
autor zdjęć

Najbardziej klasycznym przykładem jest chyba silnia :)

12.01.2016 13:58
4
odpowiedz
Sony42
31
Pretorianin

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

post wyedytowany przez Sony42 2016-01-12 13:59:23
12.01.2016 14:07
5
odpowiedz
poltar
176
Senator

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 :)

12.01.2016 14:11
Legion 13
6
odpowiedz
Legion 13
158
The Black Swordsman

Tak, funkcja rekurencyjna to taka funkcja która wywołuje samą siebie.
@up Dobre :D

12.01.2016 14:12
7
odpowiedz
Sony42
31
Pretorianin

" 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?

post wyedytowany przez Sony42 2016-01-12 14:19:45
12.01.2016 14:43
Legion 13
8
odpowiedz
Legion 13
158
The Black Swordsman

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.

12.01.2016 14:54
9
odpowiedz
Sony42
31
Pretorianin

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?

post wyedytowany przez Sony42 2016-01-12 14:54:46
12.01.2016 15:11
Łysy Samson
10
odpowiedz
Łysy Samson
99
Bass operator

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

post wyedytowany przez Łysy Samson 2016-01-12 15:13:32
Forum: Wprowadzenie do programowania