循环队列,4阶斐波那契数列

4阶斐波那契序列如下:f0=f1=f2=0, f3=1,…,fi=fi-1+fi-2+fi-3+fi-4,

利用容量为k=4的循环队列,构造序列的前n+1项(f0, f1 , f2 ,… fn ),要求满足fn ≤200而fn+1 >200。

#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 4

typedef struct {
    int *base;
    int front;
    int rear;
    int length;
}SqQueue;

SqQueue* InitQueue(){
    SqQueue *Q = (SqQueue*)malloc(sizeof(SqQueue));
    Q->base = (int*)malloc(sizeof(int)*MAXSIZE);
    if(!Q->base)
        exit(0);
    Q->front = 0;
    Q->rear = 0;
    Q->length = 0;
    return Q;
}

void EnQueue(SqQueue *Q, int e){
    if(Q->length >= MAXSIZE) return ; //队列已满
    Q->base[Q->rear] = e;
    Q->rear = (Q->rear+1) % MAXSIZE;
    Q->length++;
}

int Delete(SqQueue *Q){
    if(Q->length == 0) return 0;//队列为空
    int e = Q->base[Q->front];
    Q->front = (Q->front+1) % MAXSIZE;
    Q->length--;
    return e;
}

int Fib_4(SqQueue *Q, int n){
    if(n < 0) return -1;
    if(n < 3) return 0;
    if(n == 3) return 1;
    int cnt = 1;
    int temp = 0;
    while(cnt <= n-3){
        temp = Q->base[0] + Q->base[1] + Q->base[2] + Q->base[3];
        Delete(Q);
        EnQueue(Q, temp);
        cnt++;
    }
    return temp;
}

int Fib_4_digui(int n){ //不采用队列,用递归实现
    if(n < 0) return -1;
    if(n < 3) return 0;
    if(n == 3) return 1;
    return (Fib_4_digui(n-1) + Fib_4_digui(n-2) + Fib_4_digui(n-3) + Fib_4_digui(n-4));
}

int main()
{
  /*  int n = 0;
    while(Fib_4_digui(n-1) < 200){
        printf("Fib_4_dugui(%d)=%d\n", n, Fib_4_digui(n));
        n++;
    }*/
    SqQueue *Q = InitQueue();
    EnQueue(Q, 0);
    EnQueue(Q, 0);
    EnQueue(Q, 0);
    EnQueue(Q, 1);
    int temp = 0;
    printf("0 0 0 1");
    while(temp <= 200){
        temp = Q->base[0]+Q->base[1]+Q->base[2]+Q->base[3];
        printf(" %d", temp);
        Delete(Q);
        EnQueue(Q, temp);
    }
    return 0;
}

时间: 2024-08-08 05:37:32

循环队列,4阶斐波那契数列的相关文章

算法题---k阶斐波那契数列

#include <iostream> #include <cstdio> #include <stdlib.h> #include <algorithm> using namespace std; int main() { int a[120]; int k, m; while (1) { cout << "输入阶数k和约定的常数max.k和max用空格分开." << endl; cin >> k &

C语言算法:完善当年自编的k阶斐波那契数列

以下为大二时候的日志回放:" 题目扩展到K阶, k阶斐波那契数列, 1阶(即k=1):1.1.1.1.1.1.1.-- a0=a[1-1]=1,a1=1,a2=1,a3=1,a4=1,a5=1,a6=1-- 3阶(k=3):0.0.1.1.2.4.7..... a0=0,a1=0,a2=a[3-1]=1,a3=0+0+1=1,a4=0+1+1=2,a5=1+2+4=7 4阶:0.0.0.1.1.2.4.8.15.27-- a0=0,a1=0,a2=0,a3=a[4-1]=1,a4=1,a5=2,

一起talk C栗子吧(第四回:C语言实例--斐波那契数列)

各位看官们,大家好,从今天开始,我们讲大型章回体科技小说 :C栗子,也就是C语言实例.闲话休提, 言归正转.让我们一起talk C语言实例吧! 看官们,上一回中咱们说的是求阶乘的例子,这一回咱们说的例子是:斐波那契数列. 看官们,斐波那契数列是以数学家斐波那契数列的姓来命名的.斐波那契数列的定义:数列的第0项和第1项 为1,第n项为第n-1项和第n-2项的和.用数学公式表示出来就是:f(n)=f(n-1)+f(n-2),其中(n>1),f(n)=1;(n=0,1). 看官们,我在程序中使用了递归

用for循环和递归调用写出1~N的斐波那契数列的和 和第N位的数

首先注意: 代码是从上往下,从左往右执行的!! 这是for循环写的 m=任意数.代表1~多少位的和 public class Fei_Bo_Na_Qi{    public static void main(String[] args){        int m = 30;  //这里代表1~30位的和        System.out.println( "斐波那契数列的第 "+m+" 位数为: "+m1(m) );//  在输出的时候调用函数    }   

【Java】斐波那契数列(Fibonacci Sequence、兔子数列)的3种计算方法(递归实现、递归值缓存实现、循环实现)

斐波那契数列:0.1.1.2.3.5.8.13………… 他的规律是,第一项是0,第二项是1,第三项开始(含第三项)等于前两项之和. > 递归实现 看到这个规则,第一个想起当然是递归算法去实现了,于是写了以下一段: public class RecursionForFibonacciSequence { public static void main(String[] args) { System.out.println(recursion(10)); } public static double

斐波那契数列尾数循环

尾数循环 斐波那契数列的个位数:一个60步的循环 11235,83145,94370,77415,61785.38190, 99875,27965,16730,33695,49325,72910- 进一步,斐波那契数列的最后两位数是一个300步的循环,最后三位数是一个1500步的循环,最后四位数是一个15000步的循环,最后五位数是一个150000步的循环. 验证尾数循环 #include<stdio.h> int main() { long long int f1 = 1, f2 = 1;

java循环输出斐波拉契数列

斐波拉契--引用于百度百科 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:1.1.2.3.5.8.13.21.34.--在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理.准晶体结构.化学等领域,斐波纳契数列都有直接的应用,为

斐波那契数列和反向计算问题

反向计算:编写一个函数将一个整型转换为二进制形式 反向计算问题,递归比循环更简单 分析:需要理解,奇数的二进制最后一位是1,偶数的二进制最后一位一定是0,联想记忆,这个和整型的奇偶性是一致的,1本身就是奇数,0本身是偶数. 十进制整数转换为二进制整数采用"除2取余,逆序排列"法. 具体做法是:用2整除十进制整数,可以得到一个商和余数,再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列

斐波那契数列及青蛙跳台阶问题

题目1: 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项. 斐波那契(Fibonacci)数列定义例如以下: f(n)=?????0,1,f(n?1)+f(n?2),n=0n=1n>2 效率非常低的解法: 递归解法(效率非常低) long long Fibonacci_Solution1(unsigned int n) { if(n <= 0) return 0; if(n == 1) return 1; return Fibonacci_Solution1(n - 1) +