【MAC上学習C++】Day 14-1.練習問題6-4関数を用いて指定範囲内のFibonacci数(20点)を出力する

1938 ワード

練習問題6-4関数を用いて指定範囲内のFibonacci数(20点)を出力する
1.タイトルの抜粋
https://pintia.cn/problem-sets/12/problems/311
2.テーマ内容
本題では、Fibonacciの数を計算する単純な関数を実現し、それを利用して別の関数を実現し、2つの正の整数mn(0 Fibonacci数)を出力することが要求される.Fibonacciの数列とは、いずれかの数が前の2つの数の和(最初の2つが1と定義されている)を満たす数列である.
関数インタフェースの定義:
int fib(int n);void PrintFN(int m,int n);関数fibは第nFibonacci数を返さなければならない;関数PrintFNは1行に所定範囲[m,n]内のすべてのFibonacci数を出力し、隣接する数字の間に1つのスペースがあり、行末に多くのスペースがあってはならない.所定の区間内にFibonacci数がなければ、1行No Fibonacci numberを出力する.
サンプル1を入力:20 100 7
出力サンプル1:fib(7) = 13 21 34 55 89
入力サンプル2:2000 2500 8
出力サンプル2:fib(8) = 21 No Fibonacci number
3.ソース参照
#include

using namespace std;

int fib(int n);
void PrintFN(int m, int n);

int main()
{
    int m, n, t;

    cin >> m >> n >> t;
    cout << "fib(" << t << ") = " << fib(t) << endl;
    PrintFN(m, n);

    return 0;
}

int fib(int n)
{
    if ((n == 1) || (n == 2))
    {
        return 1;
    }
    else
    {
        return fib(n - 1) + fib(n - 2);
    }
}

void PrintFN(int m, int n)
{
    int cnt = 0;

    for (int i = 1; ; i++)
    {
        if (fib(i) > n)
        {
            if (cnt > 0)
            {
                cout << endl;
            }

            break;
        }

        if ((fib(i) >= m) && (fib(i) <= n))
        {
            if (cnt > 0)
            {
                cout << " ";
            }

            cout << fib(i);
            cnt++;
        }
    }

    if (cnt == 0)
    {
        cout << "No Fibonacci number" << endl;
    }

    return;
}