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

为何用JavaScript计算欧拉数的方法返回Infinity?

问题分析与解决

嘿,我一眼就揪出导致返回Infinity的问题啦!

你的bug出在factorial函数的逻辑里:

  • 当euler_number循环到j=0时,会调用factorial(0)
  • 你写的factorial函数判断n<=1时返回n,所以factorial(0)会返回0
  • 在JavaScript中,1/0的计算结果是Infinity,一旦e加上这个值,后续所有累加操作都只会保留Infinity,最终返回的自然就是它了

修正方案

数学上0的阶乘(0!)定义为1,我们只需要修改factorial函数的返回值就能解决问题:

function euler_number() { 
  for(var j = 0, e = 0; j < 10; j++) { 
    e += 1/(factorial(j)); 
  } 
  return e; 
}
function factorial(n) { 
  if(n <= 1) return 1; // 把返回n改成返回1,符合0!的数学定义
  return factorial(n - 1) * n; 
}
var r = euler_number(); 
console.log(r); // 现在会输出≈2.7182815255731922,接近欧拉数e的真实值

补充说明

为什么0!等于1?这是数学上的约定,目的是让阶乘在组合数学、幂级数展开(比如欧拉数的泰勒展开)等场景下保持逻辑一致性,所以这个修正完全符合数学规则哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:29:35