斐波那契数列的非递归c语言实现以及斐波那契数列的应用
2016-05-06 21:46
591 查看
斐波那契数列的定义如下:
0, n=0;
f(n)= 1, n=1;
f(n-1)+f(n-2), n>1
看到这个定义,大多数人会想到使用递归实现。因为代码简洁,但是使用递归会重复计算很多结果,严重影响时间效率,因此我们可以从下往上计算,根据f(0)和f(1)计算出f(2),然后根据f(1)和f(2)计算出f(3),以此类推,就可以算出第n项了,时间复杂度为o(n),具体实现代码如下:
首先考虑最见到的情况,只有1级台阶,有一种跳法,有2级台阶,则有两种跳法:分两次跳,一次跳1级,分一次跳,一次跳2级。然后在讨论一般情况,n级台阶,如果第一次跳1级,则跳法数目等于剩下n-1级台阶的跳法,如果第一次跳2级,则跳法数目等于剩余n-2级台阶的跳法,则这就是斐波那契数列的简单应用。
0, n=0;
f(n)= 1, n=1;
f(n-1)+f(n-2), n>1
看到这个定义,大多数人会想到使用递归实现。因为代码简洁,但是使用递归会重复计算很多结果,严重影响时间效率,因此我们可以从下往上计算,根据f(0)和f(1)计算出f(2),然后根据f(1)和f(2)计算出f(3),以此类推,就可以算出第n项了,时间复杂度为o(n),具体实现代码如下:
#include<stdio.h> int facii(int n) { int a[]={0,1}; int i=0,x1=0,x2=1,x3=0; if(n<2) return a ; for(i=2;i<=n;i++) { x3=x1+x2; x1=x2; x2=x3; } return x3; } int main() { int n,y; scanf("%d",&n); y=facii(n); printf("%d\n",y); }还有一些问题实际上也是斐波那契数列的应用,比如青蛙跳台阶问题(一次可以跳1级台阶,也可以跳2级台阶,求n级台阶有多少种跳法)。
首先考虑最见到的情况,只有1级台阶,有一种跳法,有2级台阶,则有两种跳法:分两次跳,一次跳1级,分一次跳,一次跳2级。然后在讨论一般情况,n级台阶,如果第一次跳1级,则跳法数目等于剩下n-1级台阶的跳法,如果第一次跳2级,则跳法数目等于剩余n-2级台阶的跳法,则这就是斐波那契数列的简单应用。
相关文章推荐
- C++ Primer 学习笔记_44_STL实践与分析(18)--再谈迭代器【下】
- C++ Primer 学习笔记_43_STL实践与分析(17)--再谈迭代器【中】
- C++ Primer 学习笔记_42_STL实践与分析(16)–再谈迭代器【上】
- c++ STL 工程实践的15条建议
- C++ Primer 学习笔记_41_STL实践与分析(15)--先来看看算法【下一个】
- C++ Primer 学习笔记_40_STL实践与分析(14)--概要、先来看看算法【上】
- C++ Primer 学习笔记_39_STL实践与分析(13)--multimap与multiset
- C++ Primer 学习笔记_38_STL实践与分析(12)--容器的综合应用:文本查询程序
- C++ Primer 学习笔记_37_STL实践与分析(11)--set类型
- C++ Primer 学习笔记_36_STL实践与分析(10)--map类型(下
- C++ Primer 学习笔记_35_STL实践与分析(9)--map种类(在)
- C++ Primer 学习笔记_34_STL实践与分析(8) --引言、pair类型、关联容器
- 优先队列(堆)笔记 c++
- 深入分析C++引用
- static在C和C++里各代表什么含义
- c++ primer 学习笔记(1): 第1-5章
- 计算日期c语言(结构体+函数+闰年判断)
- c++ primer 学习笔记(2): 函数 function
- c++作业5
- C++实验5-字符串