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

JS递归计算阶乘判断逻辑失效,如何正确校验非整数或小于1数值

核心问题定位

你写的代码每次都直接返回error,本质是两个逻辑错误叠加导致的:

  1. 整数判断的方法调用方式完全错误
    JavaScript中,isInteger是Number内置对象的静态方法,不存在挂在原始数字值上的num.isInteger实例方法。你代码里写的!num.isInteger执行时,num.isInteger的取值永远是undefined,取反后恒为true,这个判断分支一进函数就会触发,直接返回error。
  2. 缺失递归终止边界
    就算修正了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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 02:36:01