斐波拉契数列

古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

 

先写出来前几个月的兔子数,分别是1、1、2、3、5、8、13、21、34......

就是这样一组数列,第三个数是前两个数的和,也就是n=(n-1)+(n-2)

 

 

#include<iostream>
using namespace std;
int main()
{
    int m[23];//定义一个数组,把每个月兔子数放入
    m[0] = m[1] = 1;//第一个月和第二个月都是一只兔子
    for (int i = 0; i < 23; i++)
    {
        if (i == 0 || i == 1)
        {
            cout << "1" << endl;//第一个月和第二个月输出1
        }
        else
        {
            m[i] = m[i - 1] + m[i - 2];
            cout << m[i] << endl;//其他月份都是上两个月的和
        }
    }
    return 0;
}

 

或者用另一种方法

#include<iostream>
using namespace std;
int fun(int m)
{
    if (m == 1 || m == 2)
        return 1;
    else
        return fun(m - 1) + fun(m - 2);
}
int main()
{
    return 0;
}

迭代

假如输入一个数n 

fun(n)=fun(n-1)+fun(n-2)

fun(n-1)=fun(n-3)+fun(n-2)

fun(n-2)=fun(n-3)+fun(n-4)

.........

一直会到fun(3)=fun(1)+fun(2)=2

但是这个只能输出特定月份的兔子数

posted @ 2023-04-22 23:36  酥饼馅红豆沙  阅读(18)  评论(0编辑  收藏  举报