Skip to content

6. 繰り返し処理

6.Q Fibonatti(★★☆)

問題

正の整数を受け取り、フィボナッチ数列の番目を出力しよう。

ただし、フィボナッチ数列はとします。

入出力例

例1

入力

Input
4

出力

Output
3

例2

入力

Input
6

出力

Output
8

ヒント

ヒント1

for文で計算しよう。

ヒント2

を持つ変数latestsecond_latestを作り、ループの中で漸化式を満たすように更新していこう。

ヒント3

latestsecond_latestを同時に更新することはできないので、一時的な変数(nextなど)を使って保持しておこう。

解答例

解答例1

for文を使うことでフィボナッチ数列の番目を求めることができる。

cpp
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int second_latest = 0, latest = 1;
    for (int i = 2; i <= n; i++) {
        // i番目を計算
        int next = second_latest + latest;

        // 最新の値を更新
        second_latest = latest;
        latest = next;
    }
    cout << latest << endl;
}
解答例2

.push_backを用いて、フィボナッチ数列の各値を配列に格納していく方法もあります。

cpp
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    vector<int> fibonatti_sequence = {0, 1};
    for (int i = 2; i <= n; i++) {
        // i番目を計算
        int next = fibonatti_sequence[i-1] + fibonatti_sequence[i-2];
        fibonatti_sequence.push_back(next);
    }
    cout << fibonatti_sequence.back() << endl;
}