Написали программу, которая отображает число Фибоначчи, соответствующее вводу пользователя, но начинается с нуля вместо единицы? - PullRequest
0 голосов
/ 02 августа 2020
std::cout << "Input a number: ";

        int userParameter{};
        std::cin >> userParameter;

        int firstNumber{0};
        int secondNumber{1};

        int sumNumber{firstNumber + secondNumber};

        for(int i{1};i <= userParameter;i++)
        {
            sumNumber = firstNumber + secondNumber;
            firstNumber = secondNumber;
            secondNumber = sumNumber;
        }

        std::cout << "That number in the fibonacci sequence is " << sumNumber << '\n';

Итак, я работаю над этим в течение часа, и это самое близкое, что я могу достичь желаемого результата. Моя исходная программа имела l oop в своей собственной функции, но я решил, что это, вероятно, пустая трата места для такой маленькой программы, и переместил ее обратно в основную l oop. Моя проблема в том, что по какой-то причине последовательность Фибоначчи начинается с 0, а не с 1. Я пробовал разные мелкие мелкие настройки, так как чувствую, что близок, но где-то упускаю небольшую деталь. Я попытался изменить значение int i, я попытался изменить расположение инициализатора sumNumber, и я попытался изменить int userParameter в параметрах for l oop, и я могу с уверенностью сказать, что я последний как что я мог сделать, чтобы решить эту проблему.

1 Ответ

0 голосов
/ 02 августа 2020

Если бы я хотел изменить первое число в последовательности, я бы, вероятно, начал с просмотра строки:

int firstNumber{0};

Я предлагаю вы просто инициализируете это значение единицей, а не нулем. Это изменит вашу последовательность с {0, 1, 1, 2, 3, 5, 8, ...} на {1, 1, 2, 3, 5, 8, 13, ...}.

Однако, если на самом деле проблема в том, что первое число неверно, это, вероятно, потому, что вы доставляете sumNumber во всех случаях. Поскольку это значение начинается с с 0 + 1, оно не будет правильным для F<sub>0</sub>. Вы можете исправить это, обрабатывая F<sub>0</sub> и F<sub>1</sub> как особые случаи, вводя l oop только для F<sub>n</sub>, n > 1:

int sumNumber;
if (userParameter == 0) {
    sumNumber = firstNumber;
} else if (userParameter == 1) {
    sumNumber = secondNumber;
} else {
    for (int i = 2; i <= userParameter; i++) {
        sumNumber = firstNumber + secondNumber;
        firstNumber = secondNumber;
        secondNumber = sumNumber;
    }
}
...