k阶斐波那契序列

k阶斐波那契序列
K阶斐波那契数列的前K-1项均为0,第k项为1,以后的每一项都是前K项的和 .
用循环队列实现,
要求满足fn ≤max而fn+1 >max 。(循环队列的容量仅为k或k+1)

#include<stdio.h>
#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");
}

无觅相关文章插件,快速提升流量

发表评论