【严蔚敏】【数据结构题集(C语言版)】1.17 求k阶斐波那契序列的第m项值的函数算法
已知k阶斐波那契序列的定义为
f(0)=0,f(1)=0,...f(k-2)=0,f(k-1)=1;
f(n)=f(n-1)+f(n-2)+...+f(n-k),n=k,k+1,...
试编写求k阶斐波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。
k阶斐波那契序列定义:第k和k+1项为1,前k - 1项为0,从k项之后每一项都是前k项的和
如:k=2时,斐波那契序列为:0,1,1,2,3,5,...
k=3时,斐波那契序列为:0,0,1,1,2,4,7,13,...
算法一:数组法
判断m和k-1的大小,通过数组来存储斐波那契序列:
m<=k-1时,所有项均为0;
m>k-1时,前k-1项为0,k项之后的值通过循环和叠加依次写入数组,注意:数组中的下标从0开始;
#include <stdio.h>
#include <stdlib.h> int E[],f; //数列E用来存储斐波那契序列,f表示第m项的值
int Fibonacci(int k,int m){
int i,j,sum;
if (m<=k-) f=;
else {
for(i=;i<k-;i++)
E[i]=; //前k-1项为0
E[k-]=; //第k项为1
for(i=k;i<=m;i++){ //前k项的和
sum=;
for(j=i-k;j<=i;j++)
sum +=E[j];
E[i]=sum;
}
f=E[m-]; //第m项
}
}
int main() {
int k,m;
scanf("%d%d",&k,&m);
Fibonacci(k,m);
printf("%d",f);
system("PAUSE"); //防止程序运行结束后编辑窗口关闭,此函数包含在stblib.h中
return ;
}
方法二:递归法
由定义知递推公式:f(n)=f(n-1)+f(n-2)+...+f(n-k)
又:f(n-1)=f(n-2)+f(n-3)+...+f(n-k)+f(n-k-1) (n>k+1时成立)
由以上两式可得:f(n)=2f(n-1)-f(n-k-1) (n>k+1)
所以:
m<=k-1时,f(n)=0;
m=k,k+1时,f(n)=1;
m>k+1时,f(n)=2f(n-1)-f(n-k-1).
#include<stdio.h>
#include<stdlib.h> int Fibonacci(int k,int m){
if(m<=k-) return ;
else if((m==k)||(m==k+)) return ;
else return *Fibonacci(k,m-)-Fibonacci(k,m-k-); // m>k+1时,公式成立
}
int main(){
int k,m;
scanf("%d%d",&k,&m);
printf("%d",Fibonacci(k,m));
system("PAUSE");
}
【严蔚敏】【数据结构题集(C语言版)】1.17 求k阶斐波那契序列的第m项值的函数算法的更多相关文章
- 51 Nod 1242 斐波那契数列的第N项(矩阵快速幂模板题)
1242 斐波那契数列的第N项 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) ...
- go语言之进阶篇通过select实现斐波那契数列
一.select作用 Go里面提供了一个关键字select,通过select可以监听channel上的数据流动. select的用法与switch语言非常类似,由select开始一个新的选择块,每个选 ...
- Java版经典兔子繁殖迭代问题——斐波那契(Fibonacci)数列
/** * 题目: * 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子. * 假如兔子都不死,问经过month个月后,兔子的总数为多少对? */ public ...
- 高精度处理斐波那契序列(C语言)
#include<stdio.h> #include<string.h> //memset,strcpy,strlen函数头文件 int main(void) { ];//用来 ...
- 斐波那契堆(一)之 图文解析 和 C语言的实现
概要 本章介绍斐波那契堆.和以往一样,本文会先对斐波那契堆的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现:实现的语言虽不同,但是原理如出一辙,选择其中之一进行了 ...
- Go语言实现:【剑指offer】斐波那契数列
该题目来源于牛客网<剑指offer>专题. 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0) n<=39 Go语言实现: 递归: ...
- 【Java】 大话数据结构(10) 查找算法(1)(顺序、二分、插值、斐波那契查找)
本文根据<大话数据结构>一书,实现了Java版的顺序查找.折半查找.插值查找.斐波那契查找. 注:为与书一致,记录均从下标为1开始. 顺序表查找 顺序查找 顺序查找(Sequential ...
- 【每天一题ACM】 斐波那契数列(Fibonacci sequence)的实现
最近因为一些原因需要接触一些ACM的东西,想想写个blog当作笔记吧!同时也给有需要的人一些参考 话不多说,关于斐波那契数列(Fibonacci sequence)不了解的同学可以看看百度百科之类的, ...
- hdu 2044:一只小蜜蜂...(水题,斐波那契数列)
一只小蜜蜂... Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepte ...
随机推荐
- 用dom4j修改xml(增加修改节点)
用dom4j修改xml(增加修改节点) 博客分类: Java XMLJavaMyeclipseServlet 使用dom4j修改解析xml,xml文件的位置是配置在xml.properties文件中 ...
- lnmp集成环境tp nginx vhost配置
server { listen 80; server_name xxx; charset utf-8; root /home/wwwroot/axxx/public; index index.html ...
- opencv函数制作的秒针模型
曾经做过,没想到这次再次写这篇代码却用了这么久的时间.这回我要记住他. #include"cv.h" #include"highgui.h" int main( ...
- MySQL查询和修改auto_increment的方法
查询表名为tableName的auto_increment值: 复制代码 代码如下: SELECT AUTO_INCREMENT FROM information_schema.tables WHER ...
- springsecurity remember-me 功能
本文基于spring-security-web-4.1.2.RELEASE. 要实现rememberMe,有两种方案. 1.基于简单加密token的方法 首先需要在配置文件中加入<remembe ...
- CF757 C hash
一种数字可以变成另一种数,要求每组中变换前后各种数字数量不变,问方案数 对现有每组中的每个数字构造出现在各个组情况的序列,如2 出现在第一组和第二组各一次那么就要加入组别的标号1,2,出现重复次仍要加 ...
- 「七天自制PHP框架」应用:Model外键链接
这里以行政区数据为例: 一级行政区数据范例: 二级行政区范例: 三级行政区范例: 在Model层建立三个Model class ProvinceModel extends Model{ public ...
- eclipse中修改svn用户名和密码
开发中有时候用公共的电脑提交一些代码,eclipse没有专门的切换svn账户的功能.查阅资料得出解决办法: 1. 查看你的Eclipse 中使用的是什么SVN Interface windows & ...
- JVM调优总结(5):典型配置
以下配置主要针对分代垃圾回收算法而言. 堆大小设置 年轻代的设置很关键 JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理 ...
- VC拷贝字符串到剪切板
] ="中华人民共和国"; DWORD dwLength = ; // 要复制的字串长度 HANDLE hGlobalMemory = GlobalAlloc(GHND, dwLe ...