为何用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
相关产品推荐
相关产品推荐

