欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/6/17 编程问答 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C语言经典例11-斐波那契数列 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

目录

  • 1 题目
  • 2 分析
  • 3 实现
    • 3.1 实现1(递归)
    • 3.2 实现2(非递归)
  • 4 运行结果

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

总结

以上是生活随笔为你收集整理的C语言经典例11-斐波那契数列的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。