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 * 1A więc to co zwróci
silnia(3) to właśnie
3 * 2 * 1 co daje
6 i jest to poprawny wynik

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