JS递归计算阶乘判断逻辑失效,如何正确校验非整数或小于1数值
核心问题定位
你写的代码每次都直接返回error,本质是两个逻辑错误叠加导致的:
- 整数判断的方法调用方式完全错误
JavaScript中,isInteger是Number内置对象的静态方法,不存在挂在原始数字值上的num.isInteger实例方法。你代码里写的!num.isInteger执行时,num.isInteger的取值永远是undefined,取反后恒为true,这个判断分支一进函数就会触发,直接返回error。 - 缺失递归终止边界
就算修正了isInteger的调用问题,原逻辑递归计算时会一路减到0,触发num < 1的判断返回error,根本算不出正确的阶乘结果。
修正实现
调整判断逻辑、补上递归终止条件即可正常运行:
function findFactorial(num) { // 修正整数校验:使用Number.isInteger对入参做类型+整数校验 if (num < 1 || !Number.isInteger(num)) { return "error"; } // 补递归终止条件:阶乘计算到1时直接返回,避免继续递归到0 if (num === 1) { return 1; } return num * findFactorial(num - 1); } console.log(findFactorial(7)); // 正常输出5040
校验逻辑说明
- 传入小于1的数值(比如0、-5):直接返回error
- 传入非整数值(比如2.5、字符串、布尔值):因为
Number.isInteger会同时校验入参是否为数字类型、是否为整数,会正常返回error - 传入合法正整数(比如1、5、7):递归计算正确的阶乘结果
内容的提问来源于stack exchange,提问作者Ati
相关产品推荐
相关产品推荐

