![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 14.12.2016 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Nie wiem czy wybrałem dobre miejsce i czy w odpowiedni sposób zamieściłem nowy temat, gdyż dopiero co dołączyłem. Mój temat będzie raczej błahy ale już nie mam pojęcia jak to naprawić. Mój problem polega na tym, że moja rekurencja obliczająca silnię w żaden sposób nie chce się wywołać, być może źle to robię w obiektowym php. Funkcja ma być prywatna i nie mieć parametrów, myślę że tyle kodu starczy bo tu powinien być błąd, a ja tylko źle wywołuję tę funkcję. Jeśli w kodzie napiszę: Kod $this->SilniaRekurencja to wyświetla mi się błąd: Fatal error: Maximum function nesting level of '256' reached, aborting!Kod private function SilniaRekurencja() { if($this->argument>1) { $r=$this->argument*($this->argument-1); SilniaRekurencja(); return $r; } else { return 1; } A w takim układzie jak powyżej wyświetla mi błąd: Fatal error: Call to undefined function SilniaRekurencja() Mogę prosić o poprawienie tego? Jak trzeba wrzucę cały kod, choć sądzę że nie jest potrzebny. |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Ma byc $this->SilniaRekurencja
zas blad Fatal error: Maximum function nesting level of '256' reached, aborting! mowi ci wyraznie zes sie chlopie zapetlil. I nic dziwnego, twoj kod rekurencji jest bez sensu. if($this->argument>1) zawsze bedzie wiekszy od 1(przy zalozeniu ze raz na poczatku go zainicjowales wiekszy od 1) i sie zapetla. proste -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 14.12.2016 Ostrzeżenie: (0%) ![]() ![]() |
Tak myślałem, że $this->SilniaRekurencja(), a ta rekurencja nie chce się zakończyć ale szczerze zgłupiałem bo pierwszy raz nie mogę zrobić tej rekurencji.
Mógłbyś mi bardziej łopatologicznie podpowiedzieć jak sprawić, żeby się nie zapętlał bo w żaden sposób nie mogę tego zrobić. Może w zły sposób myślę tym razem. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No zeby sie nie zapetlalo to ten warunek
if($this->argument>1) kiedys musi wkonca zostac niespelniony ![]() Przemysl jeszcze raz na spokojnie ten algorytm bo widac ze za bardzo sie nie skupiles gdy to pisales ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
I dobrze jest zaczynać pisanie rekurencji od licznika jej wywołań, po czym ustawić maksymalną liczbę wywołań np. na tysiąc (po przekroczeniu rzucać wyjątek).
Nie ma nic gorszego niż taka niezabezpieczona rekurencja, bo może to powodować błędy wydajności, timeouty albo nawet wywalenie się serwera a szukanie problematycznego miejsca może zająć wiele godzin a nawet dni. I oczywiście najważniejsza kwestia: po co rekurencja do czegoś tak błahego, jak proste działania matematyczne? |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat po co rekurencja do czegoś tak błahego, jak proste działania matematyczne? Do cwiczenia zadan na lekcjach informatyki? Czytajac pierwszy post jasno wynika, ze dostal to jako zadanie domowe lub cos podobnego
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 14.12.2016 Ostrzeżenie: (0%) ![]() ![]() |
Nie miałem czasu wejść ale udało się to zrobić. nosper masz rację, było to zadanie domowe. Dziękuję wam za podpowiedzi. Rozwiązanie oczywiście było banalne, a błędy wynikały z mojego błędnego zrozumienia.
Temat zakończony. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 10:57 |