Как сохранить и получить ранее рассчитанное значение

Я новичок в C ++. У меня есть код для вычисления значения, но я не уверен, как получить ранее рассчитанное значение, которое он рассчитал при последнем вызове. Насколько я понимаю, способ сделать это - сохранить значения в массиве, но я не уверен в точной структуре / способе сделать это. Заранее спасибо.

double CalculateValue(Node* node)
{ 
float gamma=0.3;
double Value = 0.0;

Value = ((1-gamma)* previousValue)+ gamma); // how to get this previous value
if (Value > previousValue)

person user6472825    schedule 16.06.2016    source источник
comment
static может помочь, но кажется лучше инкапсулировать это в классе и использовать член.   -  person Jarod42    schedule 16.06.2016
comment
Кодируйте программу ряда Фибоначчи, вы ее выучите! Я обещаю!   -  person Ajay    schedule 16.06.2016


Ответы (4)


Я настоятельно рекомендую избегать глобальных / статических переменных, вероятно, лучше создать небольшой класс, который просто хранит значение и имеет функцию-член для выполнения вычислений.

person Julien Lopez    schedule 16.06.2016

Если вам нужно найти разницу между значением, возвращаемым двумя вызовами функции, то что-то вроде этого должно помочь: { const auto val1 = CalculateValue(); const auto val2 = CalculateValue(); std::cout << "Difference is: " << std::abs(val1 - val2) << std::endl; }

person Jesper Juhl    schedule 16.06.2016

Вы ищете шаблон мемоиза (а не запоминание, если вы ищите его в гугле). Это может пригодиться: мемоизированная рекурсивная факториальная функция?

person lorro    schedule 16.06.2016

Вот пример использования класса для достижения вашей цели (я не тестировал его, поэтому здесь может быть несколько ошибок)

class Solution {
public:
    void init_value(double val){ // initalize the value
        _previousValue = val;
    }
    double CalculateValue(Node* node){
        float gamma=0.3;
        double Value = 0.0;

        Value = ((1-gamma)* _previousValue)+ gamma); // _value would be your previous value
        if (Value > _previousValue){ 
            //whatever you want to do in here
        }

        _previousValue = Value; // set _previousValue to the new calculated Value
        return Value;
    }
private:
    double _previousValue; // call init_value(val) to initliaze _previousValue = val OR you can hard code _previousValue if it is always like 0 or something

}

int main() {
    Solution solution = new Solution();
    solution.init_value(0);
    Node *node; // I don't know what your Node struct looks like so...
    double value = CalculateValue(node);
    return 0;
}
person ygongdev    schedule 16.06.2016