【发布时间】:2017-12-09 02:11:48
【问题描述】:
我正在尝试以递归方式计算 TRAILING 零。基本上我拆分了最终的递归结果,然后创建了一个 var 计数器来计算所有的零。
function countingZeros(n) {
if (n < 0) {
// Termination condition to prevent infinite recursion
return;
}
// Base case
if (n === 0) {
return 1;
}
// Recursive case
let final = n * countingZeros(n -1);
let counter = 0;
String(final).split('').forEach(function(item){
item === 0 ? counter++ : counter;
});
return counter;
}
countingZeros(12) // => suppose to output 2 since there are 2 trailing zeros from 479001600 but got 0
countingZeros(6) // => suppose to get 1 since 720 is the final result.
我希望得到 2 作为回报,因为计数器必须返回,但我得到了 0。知道我的函数缺少什么吗?我该如何解决?
【问题讨论】:
-
我真的很困惑,你没有提到任何关于阶乘的事情,但是在底部给出你的例子,我认为它们是相关的?如果我理解正确,基本上你想要一个接受非负整数的函数,计算阶乘,然后返回该值中尾随 0 的数量?
-
您应该有两个函数:
factorial(n) -> factorial of n和countingZeros(n),它们调用factorial并返回返回值的尾随 0 的计数。 (countingZeros不会递归,只有factorial会)。 -
正确。没错
-
您的基本情况看起来也有问题。 0! = 1,没有尾随零。
标签: javascript recursion