Использование статического вектора для генерации рядов Фибоначчи с использованием рекурсии

Я новичок в 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>,

Другие вопросы по тегам