C语言经典例11-斐波那契数列
生活随笔
收集整理的這篇文章主要介紹了
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個月的個數為1 第2個月的個數為1 第3個月的個數為2 第4個月的個數為3 第5個月的個數為5 第6個月的個數為8 第7個月的個數為13 第8個月的個數為21 第9個月的個數為34 第10個月的個數為55 第11個月的個數為89 第12個月的個數為144 第13個月的個數為233 第14個月的個數為377 第15個月的個數為610 第16個月的個數為987 第17個月的個數為1597 第18個月的個數為2584 第19個月的個數為4181 第20個月的個數為6765 第21個月的個數為10946 第22個月的個數為17711 第23個月的個數為28657 第24個月的個數為46368 第25個月的個數為75025 第26個月的個數為121393 第27個月的個數為196418 第28個月的個數為317811 第29個月的個數為514229 第30個月的個數為832040 第31個月的個數為1346269 第32個月的個數為2178309 第33個月的個數為3524578 第34個月的個數為5702887 第35個月的個數為9227465 第36個月的個數為14930352 第37個月的個數為24157817 第38個月的個數為39088169 第39個月的個數為63245986 第40個月的個數為102334155總結
以上是生活随笔為你收集整理的C语言经典例11-斐波那契数列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言经典例8-输出乘法口诀表
- 下一篇: C语言经典例13-水仙花数