В приведенной функции я создаю статический массив. Каким образом его можно единажды обнулить, при первом входе в функцию?
typedef unsigned char uchar;
typedef unsigned long long int ullong;
// Рекурентный алгоритм нахождения F(n)
// F(n) - число Фибоначи, n - порядковый номер
ullong Fibonachi_Recursion_With_Memory(const uchar &_n)
{
static ullong *const M = new ullong[_n + 1]; // Динамически выделеный массив (который нужно обнулить)
////////////////////////////////////////////////////////////////////// - (мой способ)
static bool emptyVector(false);
if(!emptyVector)
{
for(uchar i = 0; i <= _n; i++)
M[i] = 0;
emptyVector = true;
}
//////////////////////////////////////////////////////////////////////
if(_n <= 2)
return 1;
if(M[_n] != 0)
return M[_n];
return
M[_n] = Fibonachi_Recursion_With_Memory(_n - 1) + Fibonachi_Recursion_With_Memory(_n - 2);
}
Ответ
Легко!
static ullong *const M = new ullong[_n + 1]();
Будет работать и в C++03
Комментариев нет:
Отправить комментарий