求K阶Fibonacci数列第m项的值
来源:互联网 发布:win7开启服务器端口 编辑:程序博客网 时间:2024/05/21 19:34
已知K阶斐波那契序列定义为:f0=0,f1=0,……fk-2=0,fk-1=1;
fn=fn-1+fn-2+……+fn-k, n=k,k+1,……
试编写程序求K阶斐波那契数列第m项的值。k和m均以值调用的方式在函数参数表中出现。
#include <stdio.h>
#include <conio.h>
#define OK 1
#define ERROR 0
#define N 40
typedef int status;
status K_Rank_Fib(int k,int m,long *p) /* 求K阶斐波那契数列第m项的值,以指针p返回 */
{ int i,j;long temp_array[N]; /* i,j控制循环,数组存放Fibonacci序列各项的值*/
if(k<2||m<0||m>=N) return ERROR;
if(m<k-1) *p=0;
else if(m==k-1) *p=1;
else
{
for (i=0;i<k-1;i++)
temp_array[i]=0;
temp_array[i]=1;
for (i=k;i<=m;i++) /*关键所在:k阶斐波那契序列第n项=第n-1项的2倍-第n-k-1项,这样不必每次都累加,具体请参考代码 */
{ temp_array[i]=0;
if (i==k)
{ for (j=1;j<=k;j++)
temp_array[i]+=temp_array[i-j];
}
else temp_array[i]=temp_array[i-1]*2-temp_array[i-(k+1)];
}
*p=temp_array[i-1];
}
return OK;
}
int main(void)
{ int i;
int k,m;long array[1];long *p=array;
scanf("%d%d",&k,&m);
if (K_Rank_Fib(k,m,p)) printf("%ld/n",array[0]);
else printf("Something Wrong/t");
puts("Press anykey to quit");
getch();
return 0;
}
PS:1.本人初学,不求其他只愿代码能够尽量简洁高效,欢迎各位多多批评、多多挑毛病^_^。加我QQ 505011298。
- 求K阶Fibonacci数列第m项的值
- 求Fibonacci数列的第n项
- 求Fibonacci数列的第n项
- 求fibonacci数列第100项的值(Java实现)
- 数据结构1.17题:求K阶Fibonacci数第m项
- C语言——求k阶斐波那契数列的第m项
- 递归实现求Fibonacci数列的第n项
- 函数递归法求fibonacci数列中第n项的值
- 定义Fibonacci数列,输入n,用最快的方法求该数列的第n项
- 求Fibonacci数列的前30项
- 求fibonacci数列的前40项
- 求Fibonacci数列的第N个数字
- Fibonacci 斐波那契数列(求第n项值的前4位数字)
- 九度oj1387求Fibonacci数列第n项
- 输入n,用最快的方法求Fibonacci 数列的第n 项
- 【微软100题】输入n,用最快的方法求Fibonacci数列的第n项
- 求k阶斐波那契序列的第m项的值
- 5-2编写递归函数求Fibonacci数列的第n项
- 存储过程的互相调用
- 如何在SQL server 2005中将数据库备份路径设为网络路径
- ASP.NET弹出一个对话框
- 二叉树三种遍历的非递归算法
- 设置上传文件的最大大小
- 求K阶Fibonacci数列第m项的值
- 启动和关闭Oracle的几种方式
- javascript如何判断一组单选按钮中某一指定的按钮被选择
- 动态添加html内容(insertAdjacentHTML和insertAdjacentText)
- 惯例:先写个前言。
- 还原桌面
- 与Java相关的四十个名字
- ACDSee将捆绑雅虎助手,广大ACDSee用户有难了
- sqL系统表的使用期