You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于JavaScript中||赋值逻辑及斐波那契递归终止的技术疑问

关于斐波那契记忆化递归实现的两个疑问解答

第一个疑问:storage = storage || {} 的作用

你的理解完全正确。JavaScript中||逻辑或运算符的规则是:若左侧值为真值(比如非空对象、非零数字等),则返回左侧值;若左侧为假值(比如undefined、null等),则返回右侧值。

  • 首次调用fib时,未传入storage参数,该参数默认是undefined(假值),因此会执行storage = {},创建一个空对象作为缓存容器。
  • 后续递归调用时,传入的storage是已存在的对象(真值),所以直接复用该对象,保证所有递归分支共享同一个缓存,实现记忆化的核心效果。

第二个疑问:为什么递归会在0处停止,不会进入负数?

代码中的终止条件if (number <= 1) { return 1; }已经覆盖了number=0的场景:当递归到number=0时,满足0 <= 1的判断,直接返回1,不会继续调用fib(-1, storage)和fib(-2, storage),自然不会陷入负数的无限递归。

举个实际执行的例子,计算fib(2)时:

  1. 调用fib(2, {}),不满足缓存和终止条件,执行fib(1, {}) + fib(0, {})
  2. fib(1, {})触发number <=1,返回1
  3. fib(0, {})同样触发number <=1,返回1
  4. 最终fib(2)得到1+1=2,递归到此结束,不会产生负数参数的调用

内容的提问来源于stack exchange,提问作者Primitive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:32:02