K阶斐波那契数列
2016-01-07 11:25
1221 查看
K阶斐波那契数列
定义:第k和k+1项为1,前k - 1项为0,从k项之后每一项都是前k项的和
例如:k = 3:,0 0 1 1 2 4 7 13
13 = 2 * 7 - 1
7 = 2 * 4 - 1
4 = 2 * 2 - 0
后一项等于 前一项的2倍 减去 前k+1项。这就是后面递归的原理
C语言实现:
能用递归和3种循环都实现是很不错的
定义:第k和k+1项为1,前k - 1项为0,从k项之后每一项都是前k项的和
例如:k = 3:,0 0 1 1 2 4 7 13
13 = 2 * 7 - 1
7 = 2 * 4 - 1
4 = 2 * 2 - 0
后一项等于 前一项的2倍 减去 前k+1项。这就是后面递归的原理
C语言实现:
能用递归和3种循环都实现是很不错的
#include <stdio.h> #include <stdlib.h> #define N 9//要计算的项 #define K 3//阶次 int Fib_1(int k, int m) {//K阶斐波那契数列的前K-1项均为0,第k项为1,以后的每一项都是前K项的和 //本算法计算k阶斐波那契数列的第k项-递归实现 if (m < k) return 0; else if ((m == k) || (m == k + 1)) return 1; else return 2 * Fib_1(k, m - 1) - Fib_1(k, m - k - 1);//乘2了 } int Fib_2(int k, int m) {//K阶斐波那契数列的前K-1项均为0,第k项为1,以后的每一项都是前K项的和 //本算法计算k阶斐波那契数列的第k项-循环实现 int i; int F ; for (i = 0; i < k + 1; i++) { if (i < k - 1) { F[i] = 0;//前k - 1项为0 } else { F[i] = 1;//k和k+1项为1 } //printf("F[%d] = %d\n", i, F[i]); } for (; i < N; i++) { F[i] = 2 * F[i - 1] - F[i - k - 1];//计算的原理,大家一定要懂计算后一项的算法 //printf("F[%d] = %d\n", i, F[i]); } return F[m - 1];//数组的下标要减去1,第9项 = F[8] } int main(void) { //自己测试下吧 int m = Fib_2(K, N); printf("m = %d\n", m); system("pause"); return 0; }
相关文章推荐
- 深度学习之常见tricks
- mysql 性能优化方案
- 老板发红包“钓鱼罚款”虽不违法失了员工心
- VS2015集成QT5.6.0
- 起底半成品生鲜行业之殇,下一步如何破局?
- jquery json实现省市级级联
- iOS应用程序的生命周期
- 2 Maven-安装和配置
- 7个去伪存真的JavaScript面试题
- eclipse相关知识点
- html5的本地存储问题
- Lucene Steming分词(包含单复数 snowball)
- log4net配置
- JDBC对数据库时间的操作
- POI 读取Excel文档中的数据——兼容Excel2003和Excel2007
- Mvc生命周期深度剖析
- 关于商场倒计时活动!
- C# Best Practices - Building Good Classes
- Android 关于expandableListView childrenView 点击改变颜色
- css3 -- 自动生成序号(不使用JS,可任意排序)