Использование статического вектора для генерации рядов Фибоначчи с использованием рекурсии
Я новичок в C++. Я пытаюсь написать программу на C++, которая генерирует ряды Фибоначчи путем эффективного использования рекурсии. Программа, которую я написал, выглядит следующим образом:
#include<iostream>
#include<vector>
class FibonacciDynamic
{
private:
static std::vector<int> memo(index);
int index;
public:
FibonacciDynamic(int a);
int fib(int a);
void display();
};
FibonacciDynamic::FibonacciDynamic(int a)
{
index = a;
}
int FibonacciDynamic::fib(int a)
{
if (a <= 2)
{
return 1;
}
else if(memo.at(a-1) != 0)
{
return memo.at(a-1);
}
else
{
memo.at(a-1) = memo[a - 2] + memo[a - 3];
return memo.at(a-1);
}
}
void FibonacciDynamic::display()
{
for (int i = 0; i < index; i++)
{
std::cout << "Generating Fibonacci series..." <<std::endl;
std::cout << fib(i) << std::endl;
}
}
int main()
{
std::cout << "Please, enter the index" << std::endl;
int a;
std::cin >> a;
FibonacciDynamic f(a);
f.display();
return 0;
}
Но после компиляции кода я получаю следующие ошибки -
error C2061: syntax error : identifier 'index'
error C2228: left of '.at' must have class/struct/union
error C2109: subscript requires array or pointer type
Поскольку все ошибки связаны со статическим вектором, который я использовал, я думаю, что я не объявил это правильно; вот почему компилятор не принимает его как вектор и выдает ошибки выше. Поэтому, пожалуйста, помогите и научите меня правильно использовать вектор в приведенном выше коде. Благодарю.
2 ответа
static std::vector<int> memo(index);
int index;
Я не знаю, что вы ожидаете от этого, но так как index
не инициализирован, вы, конечно, не можете использовать его для инициализации memo
, То, что у вас здесь есть, фактически объявит статическую функцию (что, я сомневаюсь, является вашим намерением).
Использование статического вектора для этого, вероятно, не лучший путь. Если вы ищете, чтобы найти N
Это число в последовательности Фибоначчи, вы можете использовать векторную переменную-член для хранения промежуточных значений или просто вычислять ее каждый раз.
static std::vector<int> memo(index);
Это объявляет статическую функцию-член memo
принимая один (неназванный) аргумент типа index
и возвращая std::vector<int>
,