Производительность: рекурсивный вызов метода или использование условной логики - PullRequest
1 голос
/ 04 января 2012

Я вызываю метод с переменной x, я делаю некоторые проверки, и если некоторые условия выполняются, я должен выполнить часть того же метода с другим значением переменной.

Что эффективнее?

  1. для повторного вызова метода (рекурсия) или
  2. чтобы изменить значение моей переменной и оставить программу для выполнения следующих строк метода?

В обоих случаях я могу заставить его работать, но как эффективнее?

Во втором случае я использую оператор if сверху. Я прочитал значение, которое я хочу, а затем следующее, если операторы выполняются с использованием этого значения.

public void mymethod(x){
    if (con){
        x = something;
    }
    if (con2){
        //do something
    } else if(con3) {
        //do something
    }
}

Ответы [ 2 ]

4 голосов
/ 04 января 2012

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

Если вы действительно хотите получитьГоворя об эффективности, имейте в виду, что современные системы, как правило, сильно зависят от кэширования, поэтому многие подходы к производительности, которые использовались в прошлом, на самом деле уже не являются улучшениями.Напротив, они ухудшают положение.

1 голос
/ 04 января 2012

более эффективно изменить значение x и продолжить выполнение метода. Причина проста. Когда вы вызываете функцию, состояние вызывающей стороны должно быть сохранено (в стек), затем считываются локальные переменные вызываемого метода и выполняется вызываемый метод. Таким образом, будучи уже в вызываемом методе myMethod , было бы «дешевле» получить доступ к переменной x , чтобы изменить ее значение, а затем продолжить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...