JSK-4 简单斐波那契【基础+打表+记忆化递归】
简单斐波那契
斐波那契数列是一种非常有意思的数列,由 0 和 1 开始,之后的斐波那契系数就由之前的两数相加。用数学公式定义斐波那契数列则可以看成如下形式:
F0=0
F1=1
Fn=Fn−1+Fn−2
我们约定 Fn 表示斐波那契数列的第 n 项,你能知道斐波那契数列中的任何一项吗?
输入格式
输入包括一行,包括一个整数 N(0≤N≤50)。
输出格式
输出包括一行,包括一个整数,为斐波那契数列的第 N 项的值。
样例输入
7
样例输出
13
问题链接:JSK-4 简单斐波那契
问题描述:(略)
问题分析:
斐波那契是一个极其经典的数列,特征突出用途广泛。该数列随着n的增大,其Fn−1/Fn−2逼近黄金分割数。
计算斐波那契数列的第n项可以用递推函数来实现,是一种计算效率最高的做法。
也可以用递归函数来计算斐波那契的第n项,但是会有重复的计算,随着n的增大,计算速度越来越慢。不过可以采用一个数组来记忆已经计算过的项,避免重复计算。这种计算方法也许可以称作为记忆化递归函数计算。这种计算需要对数组进行初始化。
如果输入多组的,则大多数情况下采用打表的方法来计算。
在维基百科中,斐波那契数列的定义是有第0项的。而其他一些地方的定义则略有不同。
斐波那契数列有通项公式,然而用通项公式计算的话有可能结果不是整数。
斐波那契数列也可以用矩阵快速幂来计算。
程序说明:(略)
参考链接:Fibonacci - Wikipedia
题记:把功能封装到函数是个好注意。
AC的C语言程序(函数)如下:
#include <stdio.h>int fib(int n)
{if(n == 0)return 0;else if(n == 1)return 1;else {int f0 = 0;int f1 = 1;int i;for(i = 2; i <= n; i++) {int tmp = f0 + f1;f0 = f1;f1 = tmp;}return f1;}
}int main()
{int n;scanf("%d", &n);printf("%d\n", fib(n));
}
AC的C语言程序(递归)如下:
/* JSK-4 简单斐波那契 */#include <stdio.h>
#include <string.h>int fib(int n)
{if(n == 0)return 0;else if(n == 1)return 1;else {return fib(n - 2) + fib(n - 1);}
}int main()
{int n;scanf("%d", &n);printf("%d\n", fib(n));return 0;
}
AC的C语言程序(记忆化递归)如下:
/* JSK-4 简单斐波那契 */#include <stdio.h>
#include <string.h>#define N 50
int f[N + 1];int fib(int n)
{if(f[n])return f[n];if(n == 0)return 0;else if(n == 1)return f[n] = 1;else {if(!f[n - 1])f[n - 1] = fib(n - 1);if(!f[n - 2])f[n - 2] = fib(n - 2);return f[n] = f[n - 1] + f[n - 2];}
}int main()
{memset(f, 0, sizeof(f));int n;scanf("%d", &n);printf("%d\n", fib(n));return 0;
}
AC的C语言程序(打表)如下:
/* JSK-4 简单斐波那契 */#include <stdio.h>
#include <string.h>#define N 50
int f[N + 1];int fib_init(int n)
{f[0] = 0;f[1] = 1;int i;for(i = 2; i <= n; i++)f[i] = f[i - 1] + f[i - 2];
}int main()
{fib_init(N);int n;scanf("%d", &n);printf("%d\n", f[n]);
}
JSK-4 简单斐波那契【基础+打表+记忆化递归】相关推荐
- C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈
C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈 分享到: QQ空间 新浪微博 腾讯微博 豆瓣 人人网 递归是一种强有力的技巧,但和其他技巧一样,它也可能被误用. 一般需要递归解决的问题有两个特 ...
- 斐波那契数列的递推与递归求法
斐波那契数列的递推与递归求法: OVERVIEW 斐波那契数列的递推与递归求法: (1)递推求Fibonacci: (2)递归求Fibonacci: (3)递归求Fibonacci(记忆化数组优化): ...
- 最简单斐波那契数列输出C语言
斐波那契数列的核心是它的递增推算代码: 废话不多说,直接上代码: #include<stdio.h> /*斐波那契数列*/ int main() {int a,b;long long in ...
- 计蒜客挑战难题:简单斐波那契
斐波那契数列是一种非常有意思的数列,由 00 和 11 开始,之后的斐波那契系数就由之前的两数相加.用数学公式定义斐波那契数列则可以看成如下形式: F_0=0F 0 =0 F_1=1F 1 ...
- 【计蒜客系列】挑战难题4:简单斐波那契
题目来源:计蒜客 斐波那契数列是一种非常有意思的数列,由 0 和 1 开始,之后的斐波那契系数就由之前的两数相加.用数学公式定义斐波那契数列则可以看成如下形式: F0=0 F1=1 Fn=Fn-1+F ...
- 数据结构与算法—递归算法(从阶乘、斐波那契到汉诺塔的递归图解)
目录 递归介绍 递归求阶乘 递归求斐波那契 递归解决汉诺塔 总结 递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的 ...
- labview求n阶乘的和_递归算法(从阶乘、斐波那契到汉诺塔的递归图解)
递归介绍 递归:就是函数自己调用自己. 子问题须与原始问题为同样的事,或者更为简单: 递归通常可以简单的处理子问题,但是不一定是最好的. 对于递归要分清以下概念: 自己调用自己 递归通常不在意具体操作 ...
- JavaScript递归函数实现斐波那契数列、黄金分割数列,递归定义与用法实例分析,
递归 所递归函数就是在函数体内调用本函数.使用递归函数一定要注意,处理不当就会进入死循环.要避免进入死循环,写递归函数先要写一个结束条件(为了结束循环)递归函数一般比如阶乘问题. 下面的代码就是一个死 ...
- 斐波那契数列(一)--对比递归与动态规划(JAVA)
兔子繁殖问题: 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子.小兔子长到第3个月后每个月又生一对兔子.按此规律,假设 ...
最新文章
- 【控制】《自动控制原理》胡寿松老师-第10章-动态系统的最优控制方法
- struts2教程(3)--请求参数处理
- python flask跨域_Flask框架踩坑之ajax跨域请求实现
- 背景图层和普通图层的区别_008Photoshop四赞图层(图层样式)
- jQueryEasyUI Messager基本使用
- 逻辑删除用户后 用户名重复怎么办?
- mysql查看编码_mysql 字符编码的查看与修改
- 如何实现两台windows电脑便签同步共享
- Linux常用命令 shell脚本for QA-数据脱敏版2
- 一站式WPF--依赖属性(DependencyProperty)一
- 单纯形法算法实现--java版
- 豆瓣fm android,豆瓣FM for Android
- 支付宝玉伯:从前端到体验,如何把格局做大?
- JavaScript期末大作业:基于HTML+CSS+JavaScript黑色的bootstrap响应式企业博客介绍模板
- html图片自带闪光效果,CSS实现的一闪而过的图片闪光效果
- 一篇毕业设计论文 | 面向对象的软件测试
- vue和react选择_如何在角度React和Vue之间选择,并且每次都正确
- python学习笔记-ipc机制 (进程间通信)及其代码实现
- www.14zz.com www.14zz.com 免费 资料库
- JavaWeb个人博客项目:手把手教你实现博客后台系统之界面图展示1
热门文章
- PowerDesigner基础使用教程
- Flash: 涅磐与重生
- python怎么把变量付给数组_使用Python将数组的元素导出到变量中(unpacking)
- php 字符串表示,php:字符串(string)数据类型实例详解
- c++ arm 图像处理_方案解析丨如何在ARM平台搭建超声波无损探伤系统
- Rxjava2+Retrofit2结合使用
- Spring+hibernate+JSP实现Piano的数据库操作---4.配置文件
- Spark面试术语总结
- python如何提高程序可读性_Python规范:提高可读性
- html的下拉刷新页面,html下拉刷新上拉加载Refresher3.0