C语言经典例11-斐波那契数列

1 题目

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

2 分析

将该例建立数学模型,规律为1,1,2,3,5,8, 13, 21, 34, 55, 89, 144, …,即下个月是上两个月之和,该模型在数学上称为fibonacci数列,通过这个规律可以构造递归函数,也可以构造非递归函数计算,显然递归函数的效率非常非常低,但是程序简洁明了(不过非递归的也不复杂…),递归公式如下:
在这里插入图片描述

3 实现

3.1 实现1(递归)

#include<stdio.h>
 
int fibonacci(int n) {
    if (n == 1 || n == 2) {
        return 1;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

int main() {
    for (int i = 1; i <= 40; i++) {
        printf("第%d个月个数为%d\n", i, fibonacci(i));
    }
    return 0;
}

3.2 实现2(非递归)

#include<stdio.h>
 
int main() {
    int f1 = 1;
    int f2 = 1;
    int month = 1; // 用于显示月份
    for (int i = 1; i <= 20; i++, month += 2) {
        printf("第%d个月的个数为%d\n", month, f1);
        printf("第%d个月的个数为%d\n", month + 1, f2);
        f1 = f1 + f2;
        f2 = f1 + f2;
    }
    return 0;
}

4 运行结果

1个月的个数为12个月的个数为13个月的个数为24个月的个数为35个月的个数为56个月的个数为87个月的个数为138个月的个数为219个月的个数为3410个月的个数为5511个月的个数为8912个月的个数为14413个月的个数为23314个月的个数为37715个月的个数为61016个月的个数为98717个月的个数为159718个月的个数为258419个月的个数为418120个月的个数为676521个月的个数为1094622个月的个数为1771123个月的个数为2865724个月的个数为4636825个月的个数为7502526个月的个数为12139327个月的个数为19641828个月的个数为31781129个月的个数为51422930个月的个数为83204031个月的个数为134626932个月的个数为217830933个月的个数为352457834个月的个数为570288735个月的个数为922746536个月的个数为1493035237个月的个数为2415781738个月的个数为3908816939个月的个数为6324598640个月的个数为102334155
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值