/*
数据结构1.17题:求K阶Fibonacci数第m项
作者:shizhixin
Email:szhixin@gmail.com
Blog:http://blog.csdn.net/ShiZhixin
*/
#include "stdafx.h"
//计算pf地址后k个数之和
int Sum(int* pf,int k)
{
int i;
int sum=0;
for (i=0;i<k;i++)
{
sum+=*pf;
pf++;
}
return sum;
}
//对pf的前k-1项前移一个数
void Movef(int* pf,int k)
{
int i;
int* q=pf;
pf++;
for (i=0;i<k-1;i++)
{
*q=*pf;
q++;
pf++;
}
}
/*输入参数k:阶数 m:第m项 从0开始,比如:
k=2;
数列为0 1 1 2 3 5 ...
其中0为第0项,5为第5项*/
int KFibonacci(int k,int m)
{
if (m<0||k<2)
{
return -1;
}
int* f=new int[k];
int i;
for (i=0;i<k-1;i++) //前0- k-2项赋0
{
f[i]=0;
}
f[k-1]=1; //k-1项赋1
int KFib; //存放第m项值
if (m<k) //m<k,不用求和移动,直接释放内存并返回
{
KFib=f[m];
delete[] f;
return KFib;
}
for (i=k;i<=m;i++) //m>k
{
int sum=Sum(f,k);
Movef(f,k);
f[k-1]=sum;
}
KFib=f[k-1];
delete[] f;
return KFib;
}
int main(int argc, char* argv[])
{
int k,m;
scanf("%d%d",&k,&m);
printf("%d",KFibonacci(k,m));
return 0;
}
数据结构1.17题:求K阶Fibonacci数第m项
最新推荐文章于 2018-10-31 20:15:42 发布