斐波那契數列的C語言實現


斐波那契數列

經典數學問題之一;斐波那契數列,又稱黃金分割數列,指的是這樣一個數列:

  1、1、2、3、5、8、13、21、……

前兩個數為1, 1,之后每個數都為為前面兩個數的相加。

 

C語言實現:

輸出斐波那契數列前n個數字:

1、普通算法

#include <stdio.h>
int test2(void); int main(void) { while(1) { int flag = test2(); if(flag != 1) break; } return 0; } int test2(void) { int t1 = 1, t2 = 1, n, next, i; printf("How many:"); scanf("%d", &n); if(n <= 0) { printf("Program Terminated!\n"); return -1; } for(i = 1; i <= n; i++) { printf("%d ", t1); next = t1 + t2; t1 = t2; t2 = next; } printf("\n"); return 1; }

2、遞歸實現

#include <stdio.h>

int test3(int); int test5(void); int main(void) { while(1) { int flag = test5(); if(flag != 1)    break; } return 0; } /* 使用遞歸方式 */
int test3(int index) { if(index == 1 || index == 2)    return 1; return (test3(index -1) + test3(index -2)); } int test5(void) { int i, n; printf("How many:"); scanf("%d", &n); if(n <= 0) { printf("Program Terminated!\n"); return -1; } for(i = 1; i <= n; i++) { printf("%d ", test4(i)); } printf("\n"); return 1; }

運行結果:

用遞歸的方法實現此數列簡潔,方便理解。但是我們仔細觀察上面的代碼,就會發現此函數中存在着大量的冗余計算,並且n越大,冗余的越多。

 

輸出數列中小於等於Max的數字

#include <stdio.h>

int test6(void); int main(void) { while(1) { int flag = test6(); if(flag != 1)    break; } return 0; } int test6(void) { int t1  =1, t2 = 1, next, Max; printf("Max: "); scanf("%d", &Max); if(Max <= 0) { printf("Program Terminated!\n"); return -1; } while(t1 <= Max) { printf("%d ", t1); next = t1 + t2; t1 = t2; t2 = next; } printf("\n"); return 1; }

運行結果:

 

 

新人才疏學淺,有錯的地方敬請指正!!

本文來自博客園,作者:夏末終年,轉載請注明出處:https://www.cnblogs.com/xiamozhongnian/p/15861331.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM