您对斐波纳契程序的修改确实可以计算总和.但是,使用递归的方式效率很低.处理此问题的一种方法是使用“动态编程”方法,其中计算值被缓存,以便第二次递归调用可以重用它们.但是,第n个斐波纳契数可以从基数计算出来.递归实现这将是:

public static int fib_r (int a, int b, int n) {

if (n == 1) return a;

if (n == 2) return b;

return fib_r(b, a+b, n-1);

}

public static int fib (int n) {

return fib_r(0, 1, (n > 0) ? n : 1);

}

总和的相应代码是:

public static int sumfib_r (int a, int b, int n) {

if (n == 1) return a;

if (n == 2) return b;

return sumfib_r(b, a+b+1, n-1);

}

public static int sumfib (int n) {

return sumfib_r(0, 1, (n > 0) ? n : 1);

}

尾部递归通常会被编译器/解释器更改为一个简单的循环,作为tail call删除的一部分.

您询问:

I still couldn’t figure out how the summation of the series works if I add 1. Can someone please explain??

这个问题实际上是关于理解算法,我认为这是SO的主题.但是,需要数学来描述算法的工作原理.所以,这真的是一个数学问题.有一个well known theorem regarding the sum of Fibonacci numbers.如果F [i]是第i个斐波纳契数,而S [n]是前n个斐波那契数的和,那么上面的定理说明:

S[n] = F[n+2] - 1

所以,如果我们根据S [n 2]的定义考虑,

S[n+2] = S[n+1] + F[n+2]

然后,用S [n] 1代替F [n 2]:

S[n+2] = S[n+1] + S[n] + 1

你应该认识到的是你的“添加1修改”的斐波那契函数.

以下是通过归纳证明您的程序计算我在原始答案中提供的总和.设F代表你的斐波那契函数,让S代表你的“加1修改”的斐波那契函数.

F[1] = 0

F[2] = 1

F[i] = F[i-1] + F[i-2] for i > 1

S[1] = 0

S[2] = 1

S[i] = S[i-1] + S[i-2] + 1 for i > 1

然后,你想要一个证明k> 0:

k

.---

S[k] = > F[i]

`---

i = 1

请注意,当且仅当以下情况时,上述总和为真:

S[1] = F[1]

S[k] = F[k] + S[k-1] for k > 1

证据非常简单.基本案例非常简单.

S[1] = F[1] = 0

S[2] = F[2] + F[1] = 1

S[3] = S[2] + S[1] + 1 = F[3] + F[2] + F[1] = 2

诱导步骤是:鉴于某些k> 1. 2,S [j 1] = F [j 1] S [j],0 << j< k 1,证明如果j = k 1则等式成立,即:S [k 2] = F [k 2] S [k 1].

S[k+2] = S[k+1] + S[k] + 1

=> S[k+2] = (F[k+1] + S[k]) + (F[k] + S[k-1]) + 1

=> S[k+2] = (F[k+1] + F[k]) + (S[k] + S[k-1] + 1)

=> S[k+2] = F[k+2] + S[k+1]

这样就完成了证明.

Java递归求费数列和_java – 斐波纳契数列 – 递归求和相关推荐

  1. 斐波纳契数列 1,1,2,3,5,8,13,21,34,55,89……这个数列则称为“斐波纳契数列”,其中每个数字都是“斐波纳契数”。

    1131: 斐波纳契数列 1,1,2,3,5,8,13,21,34,55,89--这个数列则称为"斐波纳契数列",其中每个数字都是"斐波纳契数". #inclu ...

  2. 递归求出第n项斐波那契数列_Java

    public class test_Febonacci {public static void main(String[] args) {//斐波那契额数列: 1 1 2 3 5 8 13//输出第n ...

  3. 斐波纳契数列。递归和非递归分别实现求第n个斐波那契数。(从第3项开始每1项的值为前两项的和)

    1:非递归方式实现斐波那契数列. 因为斐波那契数列条件,所以我设计了这个算法,将后一项的值赋给前一项,,再不断累加. 最后跳出循环. 接下来我重点介绍递归的方法: 递归:通俗来说就是函数自己调用自己, ...

  4. java笔试题(一):斐波那契数列

    题目: 已知斐波纳契数列如下:F[1] = 1, F[2] = 1, F[3] = 2, F[4] = 3, ..., F[n] = F[n-1] + F[n-2],那么请问F[34] + F[32] ...

  5. 数据结构之栈与递归的实现及应用(斐波拉契数列递归解法和strlen递归解法)

    栈与递归 程序中的"函数调用栈"是栈数据结构的一种应用. 函数调用栈一般是从高地址向低地址增长的,栈底为内存的高地址处,栈顶为内存的低地址处. 函数调用栈中存储的数据为活动记录.活 ...

  6. 【githubshare】推荐 GitHub 上一本开源自然数和计算机程序、欧几里得算法、递归的形式与结构、斐波那契数列、罗素悖论

    GitHub 上一份开源的小型金融知识图谱构建流程,可帮助你更好的学习与理解知识图谱的使用. GitHub:github.com/jm199504/Financial-Knowledge-Graphs ...

  7. 波菲那契数列公式_斐波那契数列为什么那么重要,所有关于数学的书几乎都会提到?...

    一句话先回答问题:因为斐波那契数列在数学和生活以及自然界中都非常有用. 下面我就尽我所能,讲述一下斐波那契数列. 一.起源和定义 斐波那契数列最早被提出是印度数学家Gopala,他在研究箱子包装物件长 ...

  8. 斐波纳契数列(Fibonacci Sequence)

    斐波纳契数列(Fibonacci Sequence)  0.前言 很久以前就想写一些竞赛学习的总结,但是由于之前事情比较多,导致计划不断的减缓.现在,大学教学任务的考试已经全部结束了,而比赛也告一段落 ...

  9. c语言输出斐波那契数列pta,从斐波那契数列说起

    这段时间在看算法相关的一些东西: 因为算法不好连笔试都过不了(哭,其实算法不仅仅是为了笔试面试,更是为了日后在工作中提高软件的运行效率.这让我联想到了前不久看过的一篇文章:李开复:算法的力量 以前没有 ...

  10. 兔子问题,斐波纳契数列

    题目:古典问题(斐波纳契数列):有一对兔子,从出生后3个月起每个月都生一对兔子,小兔子长到第三个月又会生一对兔子,假如兔子都不死,问每个月兔子总数? 分析规律:1 1 2 3 5 8 13 21- 从 ...

最新文章

  1. 限制IP 访问 Oracle 的方法
  2. 使用JQUERY实现局部页面定时刷新
  3. 综述ASP.NET下的AJAX模式
  4. express利用nodemailer发送邮件(163邮箱)
  5. CSPNOIP2020总结
  6. Mysql的安装与远程登录
  7. C. Jon Snow and his Favourite Number DP + 注意数值大小
  8. c++ array stl_C ++ STL中带有示例的array :: front()函数
  9. centos 安装git_在Centos8上安装Git的方法
  10. 硬核评测:企业上云的极速存储挑战,华为云全新极速IO云硬盘性能评测
  11. 程序员如何应对诸如“给我弄个网站吧”的请求?
  12. 关于CodeReview
  13. JAVA读取EMF文件并转化为PNG,JPG,GIF格式
  14. 用R解析Mahout用户推荐协同过滤算法(UserCF)
  15. Kali安装使用文泉驿字体
  16. visual C#(二十五)实现UWP应用的用户界面
  17. 批量生成MySQL不重复手机号大表
  18. python可视化世界地图_菜鸟笔记Python3——数据可视化(二)世界地图
  19. 宋宝华: 用off-cpu火焰图进行Linux性能分析
  20. 计算机操作员考评标准,计算机操作员职业技能鉴定标准高级.doc

热门文章

  1. SVN重定向svn switch
  2. java 以2为底的对数_如何计算Java中以整数为底的对数2?
  3. 新版个人所得税python123_个人所得税目前的主要征收方式有( )。
  4. 计算机键盘字母排列依据,键盘上的26个字母排序有什么规律吗?是怎么定的?...
  5. SpringMVC i18n国际化资源文件路径配置
  6. python如何获取网页内容_python如何获取网页内容
  7. Excel-缺失数据处理
  8. java多个文件压缩成zip文件
  9. oracle删除表空间和修改索引表空间
  10. java从菜鸟到巨佬的学习目标