The 4-order Fibonacci sequence is as follows: F0=f1=f2=0, F3=1,..., fi=fi-1+fi-2+fi-3+fi-4,
Using a cyclic queue with k=4 capacity, the first n+1 items of the sequence (F0, F1, F2,... fn) are constructed, and fn≤200 fn+1 is required to be satisfied.
#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;//Queue full
Q->base[q->rear] = e;
q->rear = (q->rear+1)% MAXSIZE;
q->length++;
}
int Delete (Sqqueue *q) {
if (q->length = = 0) return 0;//queue is empty
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) {//does not adopt a queue and is implemented recursively
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) <) {
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 <=) {
temp = q->base[0]+q->base[1]+q->base[2]+q->base[3];
printf ("%d", temp);
Delete (Q);
EnQueue (Q, temp);
}
return 0;
}
Circular queue, 4-step Fibonacci sequence