递归实现乘法持久性函数异常:高持久性数值计算错误求助
修复乘法持久性计算函数的问题
你的函数核心问题在于只执行了最多两次数字相乘操作,没有持续计算直到结果变为个位数,所以当乘法持久性大于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); }
关键修复点说明
- 新增循环/递归逻辑,确保持续计算直到结果为个位数
- 使用
currentNum(循环版)或递归参数(递归版)跟踪每次计算后的结果,避免作用域混乱 - 明确终止条件:当数字小于10时停止计算,返回累计计数
内容的提问来源于stack exchange,提问作者Akshay Benny
相关产品推荐
相关产品推荐

