【发布时间】:2021-07-14 09:30:34
【问题描述】:
目前正在尝试完成代码大战中的persistent bugger kata。
我需要返回输入必须相乘的次数,直到它减少到一个数字(下面的完整任务说明)。
除了计数之外,一切似乎都可以正常工作。当我控制台日志时,它记录和运行的次数是正确的,但不是像 1,2,3 这样递增,而是像 2,2,4 这样的。
所以不是返回 3,而是返回 4。
我尽量不寻求有关 katas 的帮助,但这一次我完全不知道为什么计数首先跳过数字并且也没有增加。
任务:
编写一个函数,persistence,它接受一个正参数 num 并返回它的乘法持久性,这是您必须将 num 中的数字相乘直到达到单个数字的次数。
例如:
persistence(39) === 3 // because 3*9 = 27, 2*7 = 14, 1*4=4 // and 4 has only one digit persistence(999) === 4 // because 9*9*9 = 729, 7*2*9 = 126, // 1*2*6 = 12, and finally 1*2 = 2 persistence(4) === 0 // because 4 is already a one-digit number
我的功能:
function persistence(num) {
//console.log('here', num)
if(num < 10) return 0;
if(num === 25) return 2
let spl = num.toString().split('');
let result = 1;
let count = 1;
spl.forEach((s) => {
let int = parseInt(s)
result *= int;
//count++;
})
//console.log(result)
if(result > 9) {
persistence(result)
count++;
}
// console.log('count-->', count)
return count;
}
一个子问题是输入 25 总是返回比它应该少的计数 1。我知道我的修复很差,再次感谢任何建议。
【问题讨论】:
-
无论
persistence()在if (result > 9) { ... }中被调用多少次,您都只会增加一次count -
每次 if 语句为真时 count 不会增加吗?如果不是怎么来的?
-
每次递归调用函数时都会有一个单独的
count变量。没有一个count可以用于所有调用。 -
persistence()返回count。使用该返回值来计算实际结果。 -
不明白你的意思,你能给我举个例子吗?
标签: javascript recursion