За последние 24 часа нас посетили 17657 программистов и 1723 робота. Сейчас ищут 907 программистов ...

рекурсия и возврат данных

Тема в разделе "Прочие вопросы по PHP", создана пользователем amir_Mirov, 24 янв 2015.

  1. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    При обращении к функции устанавливается новый scope (область видимости переменных), а это довольно дорогая операция. Поэтому если алгоритм удобно выразить в виде цикла вместо рекурсии, обычно выбирают цикл. А когда цикл можно заменить вызовом библиотечной функции это еще выгоднее )))

    Ты можешь сам попробовать разные варианты и замерить время выполнения с помощью microtime() и расход памяти через memory_get_peak_usage().

    edited: объяснение - On PHP function calls
     
  2. amir_Mirov

    amir_Mirov Новичок

    С нами с:
    25 сен 2014
    Сообщения:
    90
    Симпатии:
    0
    т.e в данном случай родной функций strlen ?
    mctime(); у меня выдает время с погрешностью. т.e всегда относительно разное.так и должно быть?

    Добавлено спустя 11 минут 2 секунды:
    Код (Text):
    1.         function while_count($item)
    2.         {
    3.        
    4.                 $i = 0;
    5.             while (isset($item{$c})) {
    6.                 $c++;                
    7.             }
    8.                 return $c;
    9.         }
    10. echo while_count($item);
    думаю задача решена код простой удобный !
     
  3. amir_Mirov

    amir_Mirov Новичок

    С нами с:
    25 сен 2014
    Сообщения:
    90
    Симпатии:
    0
    Всем доброго времени суток! продолжая тему реализаций встроенных функций силами php ( как практика построение алгоритмов)
    хочу выставить на обсуждение Г код Var_dump();
    Код (Text):
    1. function mvar_dump($item){
    2.             if(is_array($item)){           
    3.                             $result = 'array('.count($item).'){';              
    4.                         foreach($item as $k =>$v){             
    5.                             $result .= '['.$k.']=>'.gettype($v).'('.count($v).')';
    6.                         }  $result.='}';
    7.                     return $result;
    8.             }
    9.             if(is_int($item)){
    10.                     return 'int('.$item.')';
    11.             }
    12.                 return gettype($item).'('.mystrlen($item).')'.'"'.$item.'"';
    13.     }
    14.     $item = 'fsdfdfds';
    15.      echo mvar_dump($item);
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    посмотри что выведет для многомерного массива
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    конечно! часто делают так: измеряют время не одного факта, а цикла который выполняет действие 1000 раз или 1000000 раз, тогда итоговое число будет как-то статистически достоверно. и то, запускают тест несколько раз чтобы убедиться, что число изменяется не сильно раз от раза.
     
  6. amir_Mirov

    amir_Mirov Новичок

    С нами с:
    25 сен 2014
    Сообщения:
    90
    Симпатии:
    0
    да я изначально думал - добавить рекурсию или как то иначе решить это .... как бы вы решили данный момент ?
    Код (Text):
    1. if(is_array($k))$result.=mvar_dump($k);