![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 11.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Widzę że sporo dusz pisze tu na forum, jak widać PHP nie jest taki łatwy
Mam z książki taki przykład na wykorzystanie funkcji do obliczenia rekurencyjnie silni. Nie rozumiem jednak jak ten skrypt - krótki co prawda - działa. Chodzi mi konkretnie o linijkę:
ja to czytam tą linijkę tak: ma zwrócić: 5*5*-4, bo pod $n kryje się 5, a pod "silnia" też 5... ale chyba odczytuję ją źle... ![]() Cały skrypt wygląda on tak:
Czy jakaś dobra dusza mołaby mi to po kroku wyjaśnić co z czego i dlaczego ? Pozdro i dzięki Ten post edytował Jozjasz 27.09.2009, 01:09:21 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
Radze sprawdzic jaki jest wzor na silnie i sprawa sie wyjasni....
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 33 Pomógł: 0 Dołączył: 11.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
To co nikt nie chce pomóc ? Czy $n=5 i silnia=5 ? Chyba jednak tak nie jest, ale nie wiem dlaczego i jak PHP tą linijkę odczytuje...
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 686 Pomógł: 0 Dołączył: 10.11.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
Po pierwsze to co to ma oznaczac to slowo 'silnia' wewnatrz funkcji ?
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
Jak to jak to działa, proste jak budowa cepa, przy tym returnie z else, funkcja się sama wywołuje ponownie z wartością o jeden mniejszą, to tak jak byś zrobił pętlę z dekrementacją.
Czyli algorytm się wywoła tak: 5, czy pięć jest równe zero? Nie wywołaj funkcję jeszcze raz z wartością o jeden mniejszą a wynik pomnóż przez pięć, 4 czy cztery jest równe zero? Nie wywołaj funkcję jeszcze raz z wartością o jeden mniejszą a wynik pomnóż przez cztery, 3 czy trzy jest równe zero? Nie wywołaj funkcję jeszcze raz z wartością o jeden mniejszą a wynik pomnóż przez trzy, 2 czy dwa jest równe zero? Nie wywołaj funkcję jeszcze raz z wartością o jeden mniejszą a wynik pomnóż przez dwa, 1 czy jeden jest równe zero? Nie wywołaj funkcję jeszcze raz z wartością o jeden mniejszą a wynik pomnóż przez jeden, (czyli bez zmian, tutaj już można byłoby zakończyć działanie), 0 czy jeden jest równe zero? Tak, zwróć wartość wyniku funkcji. dziękuje. Ten post edytował cojack 27.09.2009, 18:36:25 -------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 233 Pomógł: 50 Dołączył: 28.10.2006 Skąd: Radom Ostrzeżenie: (0%) ![]() ![]() |
Rekurencja to w skrócie odwoływanie się przez funkcję do samej siebie. Deklarujesz funkcję o nazwie silnia, która odwołuje się do samej siebie. Tak wygląda przebieg wywołania funkcji silnia dla $n = 5: Kod return 5 * silnia(4) =>
return 5 * (4 * silnia(3)) => return 5 * (4 * (3 * silnia(2))) => return 5 * (4 * (3 * (2 * silnia(1)))) => return 5 * (4 * (3 * (2 * (1)))) -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.04.2025 - 04:23 |