java数组求斐波拉数列_js 实现斐波那契数列(数组缓存、动态规划、尾调用优化)...

斐波那契数列是以下一系列数字:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...在种子数字 0 和 1 之后,后续的每一个数字都是前面两个数字之和。斐波那契数列的一个有趣的性质是,数列的当前数字与前一个数字的比值无限趋近于黄金分割数, 1.61803398875…你可以使用斐波那契数列来生成各种各样有趣的东西,...
摘要由CSDN通过智能技术生成

斐波那契数列是以下一系列数字:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...

在种子数字 0 和 1 之后,后续的每一个数字都是前面两个数字之和。

斐波那契数列的一个有趣的性质是,数列的当前数字与前一个数字的比值无限趋近于黄金分割数, 1.61803398875…

你可以使用斐波那契数列来生成各种各样有趣的东西,比如黄金螺旋 (Golden Spiral),自然界中存在许多黄金螺旋。

1ed846b151a4012af45d669dd5dade7d.png

斐波那契数列(意大利语:Successione di Fibonacci),又译为费波拿契数、费氏数列、黄金分割数列。

在数学上,斐波那契数列是以递归的方法来定义:

F(0)=0, F(1)=1, n>1时,F(n)=F(n-1)+F(n-2)。

根据该规则,返回第n个斐波那契数。

递归法

function fibonacci(n) {

if(n === 0 || n === 1) {

return n;

}

console.log(`fibonacci(${n-1}) + fibonacci(${n-2})`)

return fibonacci(n - 2) + fibonacci(n - 1)

}

fibonacci(5)

思路:不断调用自身方法,直到n为1或0之后,开始一层层返回数据。

问题:使用递归计算大数字时,性能会非常低;另外,递归造成了大量的重复计算(很多函数执行了多次)。

数组缓存

从上面代码的 console 中可以看出,执行了许多相同的运算。如果我们对中间求得的变量值,进行存储的话,就会大大减少函数被调用的次数。

这是典型的以空间换时间。很明显,函数被调用的次数大大减少,耗时明显缩减。

let fibonacci = function() {

let temp = [0, 1];

return function(n) {

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值