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

递归实现乘法持久性函数异常:高持久性数值计算错误求助

修复乘法持久性计算函数的问题

你的函数核心问题在于只执行了最多两次数字相乘操作,没有持续计算直到结果变为个位数,所以当乘法持久性大于2时返回错误结果。具体问题点:

  • 外层的if(res>=10)仅执行一次,不会重复检查更新后的结果值
  • 调用helper的逻辑没有循环/递归终止条件,无法持续迭代计算
  • 变量res的作用域和初始化逻辑混乱,容易导致意外覆盖

修复方案1:循环实现(直观易懂)

function persistence(num) {
  // 个位数直接返回0
  if (num < 10) return 0;
  let count = 0;
  let currentNum = num;
  
  // 只要当前数字是多位数,就继续计算各位乘积
  while (currentNum >= 10) {
    // 将数字拆分为各位并计算乘积
    currentNum = currentNum.toString().split('').reduce((total, digit) => total * Number(digit), 1);
    count++;
  }
  
  return count;
}

修复方案2:递归实现(简洁优雅)

function persistence(num, count = 0) {
  // 终止条件:个位数时返回计数
  if (num < 10) return count;
  // 计算当前数字各位的乘积
  const product = num.toString().split('').reduce((acc, digit) => acc * Number(digit), 1);
  // 递归调用,计数+1
  return persistence(product, count + 1);
}

关键修复点说明

  1. 新增循环/递归逻辑,确保持续计算直到结果为个位数
  2. 使用currentNum(循环版)或递归参数(递归版)跟踪每次计算后的结果,避免作用域混乱
  3. 明确终止条件:当数字小于10时停止计算,返回累计计数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:35:19