【严蔚敏】【数据结构题集(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 ...
随机推荐
- js中字符串全部替换
废话不多说,直接发结果 在js中字符串全部替换可以用以下方法: str.replace(/需要替换的字符串/g,"新字符串") 比如: "yyyy-MM-dd-hh-mm ...
- 【OpenCV】SIFT原理与源码分析:关键点描述
<SIFT原理与源码分析>系列文章索引:http://www.cnblogs.com/tianyalu/p/5467813.html 由前一篇<方向赋值>,为找到的关键点即SI ...
- Codeforces 895.B XK Segments
B. XK Segments time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- jre,jdk,jvm的关系
今天在用maven搭建项目工程的时候出错的原因竟然是因为使用了jre,而非jdk导致报错,这里就搜集了有关这方面的信息: JDK(Java Development Kit)是针对Java开发员的产 ...
- python基础之装饰器(实例)
1.必备 #### 第一波 #### def foo(): print 'foo' foo #表示是函数 foo() #表示执行foo函数 #### 第二波 #### def foo(): print ...
- table行拖拽
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 动态规划:LIS优化
对于1D/1D动态规划来说,理论时间复杂度都是O(n^2)的,这种动态规划一般都可以进行优化,贴一篇文章 https://wenku.baidu.com/view/e317b1020740be1e65 ...
- Flexbox兼容性
.flex-container{ display: -webkit-box; /* Chrome 4+, Safari 3.1, iOS Safari 3.2+ */ display: -moz-bo ...
- 如何修改 winserver2008 密码策略为简单密码
对于不在域中的计算机, 可以运行: gpedit.msc , 如下图: 对于在域中的计算机, 应该: 如不能生效, 可重启再试.
- 【BZOJ】4318: OSU! 期望DP
[题意]有一个长度为n的01序列,每一段极大的连续1的价值是L^3(长度L).现在给定n个实数表示该位为1的概率,求期望总价值.n<=10^5. [算法]期望DP [题解]后缀长度是一个很关键的 ...