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

如何用递归实现JavaScript函数求数字各位的平均值?

解决JavaScript数字各位平均值计算的递归求和问题

你的代码目前返回undefined有两个核心原因:

  • 你定义了递归求和的sumRecursion函数,但从未调用它,也没有在averageOfDigits函数中返回最终的平均值计算结果
  • arrOfNum.pop()会直接修改原数组,属于不必要的副作用,建议避免

修正后的完整代码

function averageOfDigits(number) {
  // 处理负数:取绝对值避免负号干扰数字转换
  let arrOfStr = Math.abs(number).toString().split('');
  // 转换为整数数组(用Number比parseFloat更适合整数转换)
  let arrOfNum = arrOfStr.map(Number);
  
  // 递归求和函数:用索引遍历,不修改原数组
  function sumRecursion(arr, index = 0) {
    // 递归终止条件:索引超出数组范围,返回0
    if (index >= arr.length) {
      return 0;
    }
    // 当前元素值 + 剩余元素的递归和
    return arr[index] + sumRecursion(arr, index + 1);
  }

  // 计算总和与平均值并返回
  const total = sumRecursion(arrOfNum);
  return total / arrOfNum.length;
}

console.log(averageOfDigits(999)); // 输出9
console.log(averageOfDigits(123)); // 输出2
console.log(averageOfDigits(-456)); // 输出5

关键修正说明

  1. 补全核心逻辑:调用递归求和函数,计算总和后除以数字位数,返回最终平均值
  2. 处理边界情况:用Math.abs()处理负数输入,避免负号被转换成无效数字
  3. 优化递归实现:改用索引遍历的方式,避免修改原数组,逻辑更安全清晰
  4. 高效类型转换:将parseFloat替换为Number,更适合整数类型的转换需求

另一种递归实现(基于数组切片)

如果你偏好基于数组长度的递归写法,可以用slice()避免修改原数组:

function sumRecursion(arr) {
  if (arr.length === 0) {
    return 0;
  }
  // 取第一个元素 + 剩余数组的递归和
  return arr[0] + sumRecursion(arr.slice(1));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:10:48