Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Tak czy nie dla rekurencji
Fred1485
post 28.06.2016, 12:50:38
Post #1





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

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


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


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
nospor
post 28.06.2016, 12:52:13
Post #2





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
JoShiMa
post 28.06.2016, 13:31:01
Post #3





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Zwyczajnie trzeba umieć odróżnić kiedy rekurencja istotnie obciąży system a kiedy można ją spokojnie zastosować.


--------------------
Go to the top of the page
+Quote Post
KsaR
post 28.06.2016, 23:46:30
Post #4





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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


Ten post edytował KsaR 29.06.2016, 00:19:17


--------------------
Go to the top of the page
+Quote Post
nospor
post 29.06.2016, 09:57:56
Post #5





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




@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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
emstawicki
post 29.06.2016, 10:10:01
Post #6





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

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


@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


--------------------
Jak w Olsztynie, to tylko w Revolver Rock Cafe .
Sprawdź postęp propagacji DNS
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 01:30