k阶斐波那契序列
K阶斐波那契数列的前K-1项均为0,第k项为1,以后的每一项都是前K项的和 .
用循环队列实现,
要求满足fn ≤max而fn+1 >max 。(循环队列的容量仅为k或k+1)
#include<stdlib.h>
typedef struct//定义队列
{
int queue[100];
int front,rear;
}sequeuetp;
void initQueue(sequeuetp q)//初始化队列
{
q.front=q.rear=0;
}
void fb(int k,int max,sequeuetp q)
{
int f[100];
int i;
for (i=0;i<k-1;i++)//赋初值
{
f[i]=0;
q.queue[i]=0;
printf(" %d ",q.queue[i]);
}
q.queue[k-1]=1;
printf(" %d ",q.queue[i]);
q.rear=k-1;
int n=k;
while (q.queue[q.rear]<=max)
{
f[n]=0;
for (int j=0;j<k;j++)
{
f[n]=f[n]+q.queue[j];
}
q.rear=(q.rear+1)%k;
q.queue[q.rear]=f[n];
if (q.queue[q.rear]<=max)
printf(" %d ",q.queue[q.rear]);
n++;
}
}
int main()
{
sequeuetp q;
initQueue(q);
int k,max;
printf("请输入阶数\n");
scanf("%d",&k);
printf("请输入最大值\n");
scanf("%d",&max);
fb(k,max,q);
system("pause");
}