小博在學習c語言時,總是會遇到一些很典型的例題,如:斐波那契數列,漢諾塔問題,冒泡排列問題,等等。小博決定匯總一下,今天講清斐波那契數列,后續持續更新。
一、斐波那契數列
斐波那契數列:1,1,2,3,5,8,13,21,34,55 ......
例:求第n個斐波那契數Fib(n)
這是一個數學問題,我們可以先找找規律。
二、用遞歸的方法求
看到這里我們可以想到用遞歸的方法:
//遞歸求斐波那契數列
#include <stdio.h>
int Fib(int n)
{if (n <= 2)return 1;elsereturn Fib(n - 1) + Fib(n - 2);
}int main()
{int n = 0;scanf("%d", &n);int ret = Fib(n);printf("%d", ret);return 0;
}
該方法看似簡單,然而計算量非常大,每個數都要重新計算一遍組成它的兩個數,不要用該方法。
三、用迭代的方法求
我們再次分析找規律,會發現可以用迭代的方法:
//用迭代求斐波那契數列
#include <stdio.h>
int main()
{int n = 0;scanf("%d", &n);int a = 1;int b = 1;int c = 1;while (n>=3){c = a + b;a = b;b = c;n--;}printf("%d", c);return 0;
}
這種方法就比遞歸快的多了!
好了,小博關于斐波那契數列今天就講這么多了,歡迎大家留言評論!!
這里小博送上自己喜歡的一句話給大家:山與山之間不必相似,春與秋也不必爭艷。
加油!!