小博在学习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;
}
这种方法就比递归快的多了!
好了,小博关于斐波那契数列今天就讲这么多了,欢迎大家留言评论!!
这里小博送上自己喜欢的一句话给大家:山与山之间不必相似,春与秋也不必争艳。
加油!!