Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Rekurencja, Rekurencja
bigos1995-95
post
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 18.05.2012

Ostrzeżenie: (0%)
-----


Witam, mógłby mi ktoś po kolei, że tak się wyrażę "jak chłopu na miedzy" przybliżyć poniższy kod ? Co się dzieje krok po kroku. Z góry dzieki;)

  1. function odwroc_r($lancuch) {
  2. if (strlen($lancuch)>0) {
  3. odwroc_r(substr($lancuch, 1));
  4. }
  5. echo substr($lancuch, 0, 1);
  6. return;
  7. }
  8.  
  9. odwroc_r('Czesc');
  10.  


Ten post edytował bigos1995-95 11.08.2012, 17:11:40
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
greycoffey
post
Post #2





Grupa: Zarejestrowani
Postów: 320
Pomógł: 29
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----


Po co tam echo? Po co w funkcjach echo?

Twój kod robi tak:

Kod
silnia(3):
  wyświetl 3*silnia(2)
    silnia(2):
      wyświetl 2*silnia(1)
        silnia(1):
          zwróc 1
      wyświetla 2*1=2
      zwróc 0 (bo funkcja nic nie zwraca)
  wyświetla 3*0=0
  zwróc 0


Nie wiem jak rekurencja może być czymś trudnym, czytaj więcej zamiast modyfikować kod.

Ten post edytował greycoffey 12.08.2012, 14:29:56
Go to the top of the page
+Quote Post
Yorki
post
Post #3





Grupa: Zarejestrowani
Postów: 45
Pomógł: 2
Dołączył: 12.09.2005

Ostrzeżenie: (0%)
-----


Cytat(greycoffey @ 12.08.2012, 13:28:39 ) *
Po co tam echo? Po co w funkcjach echo?

Twój kod robi tak:

Kod
silnia(3):
  wyświetl 3*silnia(2)
    silnia(2):
      wyświetl 2*silnia(1)
        silnia(1):
          zwróc 1
      wyświetla 2*1=2
      zwróc 0 (bo funkcja nic nie zwraca)
  wyświetla 3*0=0
  zwróc 0


Nie wiem jak rekurencja może być czymś trudnym, czytaj więcej zamiast modyfikować kod.


Jak silnia z 3 może się równać zero? Przegapiłeś warunek, że liczba jest większa od 1.

EDIT:

Zasada działania rekurencji jest bardzo prosta, jest to wywoływanie funkcji przez samą siebie. W tym przypadku jeśli wywołamy funkcję z argumentem 3 :

silnia(3);

Funkcja zostaje wywołana, nie spełnia warunku 3<2, więc jako wynik funkcji zostanie zwrócone 3 * silnia(3-1), więc znowu zostaje wywołana funkcja

silnia(2);

Funkcja zostaje wywołana, nie spełnia warunku 2<2, więc jako wynik funkcji zostanie zwrócone 2 * silnia(2-1), więc znowu zostaje wywołana funkcja

silnia(1);

Funkcja zostaje wywołana, spełnia warunek 1<2 więc zostaje zwrócona jedynka czyli do działania 2 * silnia(2-1) podstawiamy 1 co daje : 2 * 1.

2 * 1 jest wynikiem silnia(3-1), a więc pod 3 * silnia(3-1) podstawiamy odpowiednio 3 * 2 * 1

A więc to co zwróci silnia(3) to właśnie 3 * 2 * 1 co daje 6 i jest to poprawny wynik (IMG:style_emoticons/default/wink.gif)

----------
Warto dodać, że w tym czasie wywołanie silnia(3) czeka na rezultat silnia(2) z kolei ta na rezultat silnia(1), jeśli nie będzie warunku ograniczającego to funkcja będzie wywoływała samą siebie w nieskończoność. (infinity loop)

Ten post edytował Yorki 12.08.2012, 14:56:40
Go to the top of the page
+Quote Post

Posty w temacie
- bigos1995-95   Rekurencja   11.08.2012, 16:10:12
- - Crozin   Zainstaluj sobie debugger (np. xdebug) i wykonaj s...   11.08.2012, 16:15:26
- - Bateria   Nic się nie dzieje Zwraca błąd.   11.08.2012, 16:15:44
- - bigos1995-95   Nie zwraca błędu, działa. Sprawdź jeszcze raz. A c...   11.08.2012, 17:13:08
- - markonix   Wklejając kod na forum ułatwiłeś sobie zbadanie te...   11.08.2012, 17:23:36
- - bigos1995-95   ja wiem co robia funkcje strlen, substr. Dobra nap...   11.08.2012, 18:17:09
- - d3ut3r   pomysł z debuggerem polega na uruchomieniu kodu st...   11.08.2012, 18:44:37
- - bigos1995-95   To debugowanie odbywa się w jakimś programie ? Jak...   11.08.2012, 19:27:29
- - scanner   Rekurencja to jeden z problemów matematycznych, lo...   11.08.2012, 19:39:28
- - markonix   Rekurencje dobrze znać bo to dosyć ciekawe pojęcie...   11.08.2012, 19:40:33
- - bigos1995-95   Tak właśnie słyszałem i mam nawet w książce napisa...   11.08.2012, 21:33:46
- - IceManSpy   A w google szukałeś? Przecież tam jest tyle inform...   11.08.2012, 21:47:20
- - bigos1995-95   Tak właśnie nie czytałeś tego nawet nie spojrzałeś...   12.08.2012, 02:58:48
- - markonix   Co z tego, że z Pascala jak tu nie chodzi o naukę ...   12.08.2012, 07:20:42
- - bigos1995-95   Więc tak , trochę poczytałem ale nic mi to nie dał...   12.08.2012, 11:10:11
- - greycoffey   Po co tam echo? Po co w funkcjach echo? Twój kod ...   12.08.2012, 14:28:39
|- - Yorki   Cytat(greycoffey @ 12.08.2012, 13:28...   12.08.2012, 14:42:22
|- - greycoffey   Cytat(Yorki @ 12.08.2012, 15:42:22 ) ...   12.08.2012, 20:56:48
- - bigos1995-95   Rozumiem jak dziala ta funkcja: [PHP] pobierz, pl...   12.08.2012, 16:29:51
- - IceManSpy   Rozpisz sobie na kratce, będzie Ci łatwiej. Z resz...   12.08.2012, 16:32:42
- - bigos1995-95   No niestety taki jestem że jak czegoś nie wiem to ...   12.08.2012, 17:07:54
- - klocu   Krótko i na temat: Kod- wywołujesz odwroc_r(...   12.08.2012, 17:58:06
- - bigos1995-95   klocu jesteś wielki ; ) Jeszcze jakbyś mógł mi po...   12.08.2012, 19:44:57
- - Crozin   Nie wyszło 20, tylko 2 i 0 - instrukcja echo z lin...   12.08.2012, 20:25:13
- - bigos1995-95   Dokladnie, zapomniałem o dbuggerze a czytałem wczo...   12.08.2012, 20:47:49


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.12.2025 - 22:59