【发布时间】:2020-04-21 13:28:17
【问题描述】:
function singleDigit(num) {
let counter = 0
let number = [...num + ''].map(Number).reduce((x, y) => {return x * y})
if(number <= 9){
console.log(number)
}else{
console.log(number)
return singleDigit(number), counter += 1
}
}
singleDigit(39)
上面的代码接受一个整数,并通过将它乘以它自己的数字将它减少到一个数字。
示例是 39。
3 x 9 = 27.
2 x 7 = 14.
1 x 4 = 4.
控制台将记录:
27
14
4
如何跟踪递归函数被调用了 3 次?
我已尝试添加计数器,但无法更新。 希望有任何帮助
【问题讨论】:
-
.map(Number)是多余的,因为*运算符无论如何都会强制将值编号。 ;-) -
几个问题:1)你打算如何处理负数?例如,数字
-57实际上是一个-50和一个-7.. 当这样看时,它会减少-5x-7产生一个正数35。或者您是否希望它只看到带有5而不是7的负号,即使7实际上也是负号。 2)您打算如何处理包含零的数字?因为这将自动归零减少。因此,您传入的数字越大,它就越有可能归零。另一种选择是跳过零 -
我意识到我上面的问题不是关于计算递归,而只是这个问题中使用的内容的解谜方面。请原谅我。
-
很高兴你喜欢我的回答,但出于实际目的,我认为stackoverflow.com/a/59570894/1346276 是最简洁的通用变体。
-
@phipsgabler 任何花时间写出聪明而连贯的答案的人都值得点赞。谢谢
标签: javascript recursion