【严蔚敏】【数据结构题集(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 ...
随机推荐
- HDU 3480 斜率dp
Division Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 999999/400000 K (Java/Others)Total ...
- 3 ways to download files with PowerShell
Perhaps the greatest strength of PowerShell is it's foundation on the .NET framework. The .NET frame ...
- wget命令下载文件
wget -r -N -l -k http://192.168.99.81:8000/solrhome/ 命令格式: wget [参数列表] [目标软件.网页的网址] -V,–version 显示软 ...
- 分治法:三维偏序问题之CDQ分治
我怀疑那个k是用来定界限用的 #include <cstdio> #include <cstring> #include <algorithm> using nam ...
- 你不知道的Static
Static静态字段,静态方法,静态代码块 壹 简介 一些场景下会要求一个类的多个实例共享一个成员变量:有时候想定义一些不和具体对象关联.不需要new就调用的方法 举例:Console类的Write ...
- 【leetcode 简单】第一题 两数之和
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...
- filezilla显示隐藏文件
我们在习惯使用flashfxp等工具,但是随着主机商限制较多,这些老的FTP工具不怎么好用了,比如主机商会推荐使用到Filezilla等工具.但是比如息壤主机,我们在管理linux环境下htacess ...
- python中赋值、浅拷贝、深拷贝详解(转)
一.赋值 >>> a = [1, 2, 3]>>> b = a>>> print(id(a), id(b), sep='\n')139701469 ...
- linux删除第几天日志【原创】
cat del.sh #!/bin/bash thirty=`date -d '30days ago' +%Y-%m-%d` cd $ #删除输入路径下第30天的日志文件 find . -name & ...
- C#技术分享【PDF转换成图片——11种方案】
1.[iTextSharp.dll],C# 开源PDF处理工具,可以任意操作PDF,并可以提取PDF中的文字和图片,但不能直接将PDF转换成图片. DLL和源码 下载地址:http://downloa ...