Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Tak czy nie dla rekurencji
Forum PHP.pl > Forum > Przedszkole
Fred1485
Czy w dobie dzisiejszego programowania używanie rekurencji jest złą praktyką? Czasem spotykam się z opiniami że z rekurencja lepiej dać sobie spokój bo źle wpływa na wydajność. Dłubiąc w kodzie w pewnym etapie fajne wyszło z rekurencją. Dałoby się zrobić to bez niej, trochę więcej kodu trzeba by napisać. Mam kompleks, żeby wrócić i to przepisać bez rekurencji. Funkcja sama siebie wywoła maksymalnie około 10 razy. Jak poważni programiści się zapatrują na ten błahy problem? wink.gif
nospor
Wszystko jest dla ludzi, trzeba tylko wiedziec jak uzywac. Czasami rekurencja jest poprostu jedyna najlepsza opcja dla danego rozwiazania, wiec wszystko zalezy od konkretnego przypadku.
JoShiMa
Zwyczajnie trzeba umieć odróżnić kiedy rekurencja istotnie obciąży system a kiedy można ją spokojnie zastosować.
KsaR
Z ciekawości zrobiłem test,
Nie wiem na ile % poprawny ale myślę że mogę się dopisać do powyższych wypowiedzi.

Jak się wykona poprawnie to różnice nie są widoczne.

https://eval.in/597266
^ rekurencja.
"OK (0.016 sec real, 0.016 sec wall, 14 MB, 44 syscalls)"
  1. <?php
  2.  
  3. function recursion($x)
  4. {
  5. if (1000 !== $x) {
  6. return recursion(++$x);
  7. }
  8.  
  9. return $x;
  10. }
  11.  
  12. echo recursion(0);


https://eval.in/597265
^ pętla.
"OK (0.012 sec real, 0.012 sec wall, 14 MB, 42 syscalls)"
  1. <?php
  2.  
  3. function loop($x)
  4. {
  5. for (; 1000 !== $x; ++$x);
  6.  
  7. return $x;
  8. }
  9.  
  10. echo loop(0);
nospor
@KsaR to raczej oczywiste ze rekurencja zajmie wiecej czasu niz zwykla petla. No ale tez i nikt nie powazny nie zamienia petli na rekurencje wink.gif No nie po to wymyslono rekurencje
emstawicki
@KsaR
Przy próbie jednego testu ciężko takim testem cokolwiek stwierdzić, zauważ, że uruchamiając ponownie obydwa skrypty czas się zmienia nagle rekurencja wykonuje się 0.007 a pętla 0.016. (już nie mówiąc o chwilowym obciążeniu serwera).
Co do rekurencji, zaletą jest na pewno prostota kodu a wadą kluczową jest to iż źle zastosowana jest tylko pożeraczem pamięci smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.