java求斐波那契前n项和_算法之斐波那契数列如何求第n个值与前n项和?(Java)...
斐波那契数列
指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)。
1.题目
1.1.求斐波那契数列的第n项的值
2.2.求斐波那契数列前n项的和
2.例子
2.1.求第n项的值
输入:6
输出:8
2.2.求前n项的和
输入:6
输出:20
3.解析
3.1.求第n项的值
3.1.1找出斐波那契数列的规律,用不断的递归解决,但递归的时间复杂度为O(2^n)。
3.1.2另一种方式是自底向上求解,从1,2推导3。再从2,3推导出4。也就是说,我们想要求第n项的值的话,只需要知道n-1和n-2的值就可以了,而不需要像递归那样所有的值都求出来。
3.2.求前n项的和
3.2.1在递归的基础上,再加一个sum存储前n项的和
3.2.2求前n项的和我们可以推导出一条公式:Sn = A(n+2) - 1。我们可以直接用求第n项的值的方法来求出A(n+2) - 1,就可以得出前n项的和了。
这个公式是怎么得到的呢?很简单。
求和:Sn=a1+a2+a3+……+An
Sn也可以写成Sn=1+a1+a2+a3+……+An-1
因为a2等于1,所以Sn=a2+a1+a2+a3+……+An-1
即:Sn=a2+a1+a2+a3+……+An-1
Sn=a3+a2+a3+……+An-1
Sn=a4+a3+……+An-1……
Sn=An+A(n-1)+An-1
即:Sn=A(n+1)+An-1=A(n+2)-1
4.递归求法,时间复杂度O(2^n)
4.1.求第n项的值
public static int f(int n) throws Exception {
if(n==0){
throw new Exception("参数错误!");
}
if (n == 1 || n == 2) {
return 1;
} else {
return f(n-1)+f(n-2);//自己调用自己
}
}
4.2.求前n项和
public static int FibonacciSum(int n) {
int sum = 0;
for(int i=1;i<=n;i++) {
sum += Fibonacci(i); //累加前n项
}
return sum;
}
5.非递归求法,时间复杂度O(n)
5.1.求第n项的值
private int fibonacci(int n){
int f1 = 1;
int f2 = 1;
int prePreFib = f1;
int preFib = f2;
int fib = 0;
int flag = 2;
if (n == 1 || n == 2){
return f1;
}
if (n >= 3){
while (flag < n){
fib = preFib + prePreFib;
prePreFib = preFib;
preFib = fib;
flag++;
}
}
return fib;
}
5.2.求前n项和
private int fibonacciSum(int n){
return fibonacci(n+2) - 1;
}
扩展:
题目要求:编写程序在控制台输出斐波那契数列前20项,每输出5个数换行
斐波那契数列指的是这样一个数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …
这个数列从第三项开始,每一项都等于前两项之和。
这道兔子题的实质就是斐波那契数列: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?,现在从变量、数组、递归三个角度出发解决这个puzzle,当然还有其它的方法,同一道题用各种不同的思路去思考解决,也是对知识综合运用的锻炼吧。
关于斐波那契数列的优化 https://blog.csdn.net/dadai_/article/details/50209511
java求斐波那契前n项和_算法之斐波那契数列如何求第n个值与前n项和?(Java)...相关推荐
- 斐波那契回调线怎么画_自动绘制斐波那契回调线的指标
斐波那契回调线是根据斐波那契数列(也称为黄金分割数列)所对应的点画出来的一组线,它的作用主要是用来分析行情的回调力度及相应的回撤点上存在的支撑或阻力作用.黄金分割在外汇黄金交易市场上是一个被广泛应用的 ...
- 斐波那契回调线怎么画_交易者必备——斐波那契回调线的绝妙用法
本期<交易智慧>,将为大家介绍一个交易者常用的技术指标--斐波那契回调线,又称黄金分割线.在交易市场上,大多数的技术指标都具有滞后性,导致交易者在使用时不太好掌握.但是,斐波那契回调线具有 ...
- 斐波那契数列10007求余(Java实现)
斐波那契数列10007求余(Java实现) 第一次写文章,加上斐波那契数列比较经典,就把这题作为样例写一篇博客 题目描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2= ...
- python求斐波那契数列第n个数及前n项和_使用python求斐波那契数列中第n个数的值示例代码...
斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列&qu ...
- JAVA数据结构与算法之斐波那契查找(黄金分割点)
前言 最近面临毕业就业,在复习数据结构与算法,为了更好地掌握,加深印象,所以决定写一些博客来知识复现. 温馨提示:这篇博客可能不适合刚学数据结构的新手. 算法的简单介绍 黄金分割点是指把一条线段分割为 ...
- access求斐波拉契数列_打印目录,斐波那契数列的递归与循环,牧场牛数
实验报告 1 任务概述(任务说明) 1 f(n)=f(n-1)+f(n-2) f(0)=f(1)=1 , 求斐波那契数列第 20 项, 分别用循环和递归的方式, 比较时间效率.提示:可以使用 c 函数 ...
- [剑指Offer]斐波那契数列、跳台阶、兔子数量问题(递归、非递归)(Java)
剑指Offer题目 斐波那契数列 题目描述 [剑指Offer 7]大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). [剑指Offer 8]一只青蛙 ...
- 斐波那契(Fibonacci,意大利数学家,1170年-1240年)数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、……。这个数列从第三项开始,每一项都等于前两项之
Problem Description 斐波那契(Fibonacci,意大利数学家,1170年-1240年)数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.--.这 ...
- python利用列表计算斐波那契数列前30项并输出_python分享斐波那契数列示例分享 Python 分享斐波那契数列前20项和...
分享助python大神.斐波那契数列,编写程序,利用列具体内容 拜托拜托有时候,最痛苦的其实不是失去,而是你得到以后其实不快乐. ##缩进格式看图 l=[1,1] for i in range(28) ...
最新文章
- Spark源码阅读02-Spark核心原理之监控管理
- mysql 显示前三项_详解MySQL三项实用开发知识
- unity片元着色器中获取屏幕坐标_Unity踩坑笔记(持续更新)
- c++向量和数组的区别_向量,矩阵和张量的导数 | 简单的数学
- 安装和配置VNC服务器的法则
- P4144 大河的序列
- Keil | 解决Keil与Source Insight4.0配合使用时,代码与注释位置(乱码)不一样的问题
- linux开机启动详细流程图
- 腾讯再发股票吸引人才,受益2.57万名员工,人均超8万港元
- C++之string字符串类再探究
- markdown语法中的空格_Markdown实用技巧-基础语法
- 我去,还在这样读写 excel 这也太低效了吧!
- 复旦计算机学院软件工程,2019年复旦961软件工程专硕考研初试363+复试经验分享...
- FreeMarker模板导出word报表
- 简单个人网页制作 个人介绍网页模板 静态HTML留言表单页面网站模板 大学生个人主页网页
- dbus-glib编程2:d-feet的使用
- Mac系统查看端口占用的进程
- 数据脱敏 Data Masking
- 出海季,互联网出海锦囊之本地化
- Restful风格的springMVC配搭ajax请求的小例子
热门文章
- C# dictionary 遍历性能分析
- 求乘法逆元c语言版,C语言实现求乘法逆元
- Linux Nginx的安装与配置(全程图文记录超详细)
- 基于ssm开发的投诉建议管理系统
- NETGARE超频失败砖的拯救
- Unity游戏开发完整项目,全套代码+资源
- scheme心得(1) continuation与阴阳谜题
- 3、DQL(数据查询语句)
- select2 多选的下拉框报错Uncaught TypeError: Cannot read property 'toUpperCase' of undefined
- 通用量子计算实用化又进一步,俞大鹏团队实现量子纠错领域重大进展,首次超越盈亏平衡点|Nature...