За последние 24 часа нас посетили 64289 программистов и 1754 робота. Сейчас ищут 969 программистов ...

рекурсивные функции

Тема в разделе "PHP для новичков", создана пользователем NewUse, 29 сен 2018.

  1. NewUse

    NewUse Новичок

    С нами с:
    14 июл 2018
    Сообщения:
    46
    Симпатии:
    0
    На сколько допустимы функции такого вида, или лучше так не делать?:
    PHP:
    1. function send_data($socket, $msg, $len, $retries_count) {
    2.         if (socket_write($socket, pack("H*",$msg))) {
    3.             $resp="";
    4.             if (socket_recv($socket, $resp, $len, MSG_WAITALL)) {
    5.                 socket_close($socket);
    6.                 return $resp;
    7.             } else {
    8. #####New retry up to 3
    9.                $retries_count++;
    10.                 if  ($retries_count<4)  {
    11.                     send_data($socket,$msg,$len,$retries_count);
    12.                 };
    13.             }
    14.         }
    15. }
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну в данном случае можно было обойтись и без рекурсии, простым циклом. Причём, достаточно очевидным образом.
     
  3. NewUse

    NewUse Новичок

    С нами с:
    14 июл 2018
    Сообщения:
    46
    Симпатии:
    0
    это понятно, но на самом деле функция чуть длиннее и охватывать всю её циклом -- не удобно читать, на сколько плохо использовать рекурсии и какие могут быть подводые камни?
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    переполнение стека вызвов, например. Если функция слишком длинная, лучше разбить на несколько. Рекурсию лучше использовать только там, где без неё не обойтись (ну или не обойтись больших усилий, в принципе, считается, что любую рекурсию можно заменить итерацией)