【数据结构】求K阶斐波那契数列
来源:互联网 发布:仙剑奇侠传四结局 知乎 编辑:程序博客网 时间:2024/06/06 18:16
K阶斐波那契数列:数列第1项到第k-1项为0,第k项为1,之后从第(k+1)项开始每一项为前k项之和。
要求 :
编写求k阶斐波那契序列中前n+1项(f1,f2,…,fn)的算法,要求满足fn .max,而fn +1>max,max为某个约定的常数,注意:本题所用循环队列的容量为k,算法结束时,留在队列中的元素为所求k阶斐波那契序列中的最后k项。
思路:利用循环队列(令队列的长度为k)
- 输入数列的前k项,依次入队,
- 队首元素出队并输出
- t入队(t初始值为1)
- 对队列中所有元素求和为t
- 若t<=max执行步骤2
- 输出队列中余下的元素
代码如下
void Fibonacci(int k,int max){ Queue *q; int i, item, t = 1,j = 0; q = CreateQueue(k); for(i = 0; i<k; i++) if(i == k-1) AddQ(q,1); else AddQ(q,0); while(t <= max){ j++; printf("%d ",DeleteQ(q)); AddQ(q,t); t = 0; for(i = 0; i<k; i++){ item = DeleteQ(q); t += item; AddQ(q,item); } } for(i = 0; i<k; i++){ item = DeleteQ(q); printf("%d ", item); AddQ(q,item); }}
上述函数中队列的相关操作如下
注:这里的队列根据要求做了一些修改,数组Date没有事先给定大小,而是以指针形式给出,这样方便根据数列的阶数k来改变数组大小
typedef struct{ int *Date; int front; int rear; int K;} Queue;Queue* CreateQueue(int k){ Queue *Q; Q = (Queue*)malloc(sizeof(Queue)); Q->K = k + 1; Q->Date = (int*)malloc(sizeof(int)*Q->K); Q->front = Q->rear = 0; return Q;}void AddQ(Queue *Q, int item){ if((Q->rear+1)%Q->K == Q->front){ return; } else{ Q->rear = (Q->rear+1)%Q->K; Q->Date[Q->rear] = item; }}int DeleteQ(Queue *Q){ if(Q->rear == Q->front){ printf("队列为空\n"); return NULL; } else{ Q->front = (Q->front+1)%Q->K; return Q->Date[Q->front]; }}
0 0
- 【数据结构】求K阶斐波那契数列
- K阶斐波那契数列
- K阶斐波那契数列
- K阶斐波那契数列
- k阶斐波那契数列
- k阶斐波那契数列
- k阶斐波那契数列
- C语言——求k阶斐波那契数列的第m项
- k阶斐波那契数列的c语言程序
- 数据结构题集(严蔚敏)1.17求k阶斐波那契序列的第n项值的函数算法
- 数据结构--栈--斐波那契数列
- 扩展的斐波那契数列:求兔子个数
- java求最大公约数,最小公倍数,斐波那契数列
- oc 实现斐波那契数列-- 求兔子数量
- 斐波那契数列衍生:求青蛙跳台阶
- 动态规划-斐波那契数列求算
- 斐波那契数列求兔子总数
- 数据结构学习之斐波那契数列
- #51 C. Pie or die (博弈)
- java jsonpath 修改指定路径的值
- iOS单元测试
- Java简单聊天室第一个版本
- CPP复习笔记 3
- 【数据结构】求K阶斐波那契数列
- Nginx SSL+tomcat集群,request.getScheme() 取到https正确的协议详解
- 滑雪
- {小结}2017.04.15【NOIP2017提高组】模拟赛B组
- android/support/v4/text/TextUtilsCompat.class异常
- hadoop集群安装
- 腾讯课堂IMWeb小白(Day1)
- 将用户输入的字母进行大小写转换
- DOS常用命令