这里提一下简单斐波拉契数列第n项求法(python):
def fab(n):
if n < 1:
print('输入有误!')
return -1
if n == 1 or n == 2:
return 1
else:
return fab3(n - 1) + fab3(n - 2)
temp = int(input('请输入斐波拉契数列的阶数:'))
print('结果',fab(temp))
数据结构循环队列斐波拉契数列的实现:
#include <stdio.h>
#include <stdlib.h>
#define size 100
typedef struct{
int *base;
int front;
int rear;
}SqQueue;
//计算k项数之和
int AddSum(int n,int *q) {
int sum=0;
int i;
for(i=0;i<n;i++)
sum+=q[i];
return sum;
}
void fabolacci(SqQueue &Q,int *store,int k,int max){
int n,i;
if((!Q.base)||(!store)) {
printf("Error!");
}
for( i=0;i<k-1;i++) {//将前k-1项置0
store[i]=0;
Q.base[i]=0;
}
store[k-1]=1;
Q.base[k-1]=1;
store[k]=AddSum(k,Q.base);
Q.front=0;
Q.rear=k-1;
n=k;
while(store[n]<=max) {//将数列最后k项存入循环队列中
Q.rear=(Q.rear+1)%k;
Q.base[Q.rear]=store[n];
n++;
store[n]=AddSum(k,Q.base);
}
printf("The numbers are:\n");
for(i=0;i<n;i++)
printf("%d%c",store[i],' ');
printf("\n");
}
int main() {
SqQueue Q;
int k,max,i,n,*store;
printf("请输入此斐波那契的阶数:");
scanf("%d",&k);
printf("请输入边界数:");
scanf("%d",&max);
//初始化循环队列
Q.base=(int*)malloc(k*sizeof(int));
//建立一个数组,方便存放和计算该数列的值
store=(int*)malloc(size*sizeof(int));
fabolacci(Q,store,k,max);
return 0;
}