- 29
- 0
一道面试题
如下:
斐波那契数列指的是类似于以下的数列:
1, 1, 2, 3, 5, 8, 13, ....
也就是,第 n 个数由数列的前两个相加而来:f(n) = f(n - 1) + f(n -2)
请你完成 fibonacci 函数,接受 n 作为参数,可以获取数列中第 n 个数,例如:
fibonacci(1) // => 1
fibonacci(2) // => 1
fibonacci(3) // => 2
...
测试程序会从按顺序依次获取斐波那契数列中的数,请注意程序不要超时,也不要添加额外的全局变量。
本题来源:《JavaScript 语言精髓》
答案之一:
const fibonacci = ((memo = [0, 1]) => {
const fib = (n) => {
let result = memo[n]
if (typeof result !== "number") {
result = fib(n - 1) + fib(n - 2)
memo[n] = result
}
return result
}
return fib
})()
问题:
1,这里的程序超时,指的是什么?
2,有没有大佬详细解说下这个答案?
- 共 0 条
- 全部回答
-
为②丶量身定制の娃 普通会员 1楼
记忆化是一种常用的优化技术,特别适用于处理具有重叠子问题的动态规划问题。在解决斐波那契数列问题时,如果直接使用递归方法,会存在大量的重复计算,效率极低。这时,我们可以借助记忆化技术来提高计算效率。
记忆化斐波那契函数的基本思想是:将已经计算过的斐波那契数存储起来(通常用一个数组或者字典),当下次需要计算同样的斐波那契数时,直接从存储结构中取出结果,避免了重复计算。
以下是一个Python实现的记忆化斐波那契函数示例:
```python def memoized_fib(n, memo={}): if n in memo: return memo[n] elif n <= 1: memo[n] = n else: memo[n] = memoized_fib(n-1, memo) + memoized_fib(n-2, memo) return memo[n]
测试
print(memoized_fib(30)) # 输出:832040
`` 在这个实现中,memo是一个字典,用于存储已经计算过的斐波那契数。当调用memoized_fib(n)时,首先检查n是否已经在memo中,如果在,则直接返回对应的值;如果不在,则先计算出该斐波那契数,并将其存入memo`,然后返回结果。这样,对于重复计算的子问题,我们只需要进行一次计算并保存结果即可,大大提高了计算效率。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
