@Katzuhiro_Akira

Как влияют рекурсии на производительность?

Доброго времени суток.
Некоторое время своего опыта писал код процедурным стилем т е ни о каких-либо рекурсиях и функциях вообще речи не шло(только для избавления от повторов).
Сейчас появилась задача, которая требует максимальной универсализации, поэтому пришлось немного сместить свой стиль от привычных процедур к функциональному стилю.

Как изменится скорость исполнения задачи в зависимости от вложенности?
Например, есть такая ситуации(разумнее написать кодом):
function func($arg1)
{
  switch(true)
  {
    case $arg1 == true:
      Некоторые дейсвия для положительного
    break;

    case $arg1 == false:
       Некоторые дейсвия для отрицательного
    break;

    default:
     func(true); // если не выбрано входящее
    break;
   }
};

Второй случай:
function func($arg1)
{
   if(func2($arg1)!=false)
    {
       // некая результирующая операция, вроде закрытия файла/потока/сессии
     };
};


В каких случаях уменьшится производительность использования рекурсии относительно полного написания процедурами. Прекрасно понимаю о громосткости(и скрипта соотвественно) процедур относительно функций и обьектов, но разве обращение не станет занимать больше времени чем исполнение того же действия процедурами?
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 2
Ну рекурсия еще не означает функциональности. Это всё тот же процедурный стиль.
Про производительность не беспокойтесь - скорее все этот участок кода не будет источником тормозов, а если и будет - вы увидите это в профайлере и именно тогда и подумаете, как его оптимизировать
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Во втором случае никакой рекурсии нет, если конечно из func2 снова не вызывается func1.
В первом случае всё решается гораздо проще
function func($arg1 = true)
{
  if ($arg1) {
    ...
  } else {
    ...
  }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽