hackerrank中基本功能挑战的其他测试用例

other text cases for basic function challenge in hackerank

我正在尝试解决 this hackerrank challenge。代码给出了正确的解决方案并通过了基本测试用例,但是,另外两个测试用例失败了。如果这种方法可以通过测试,我们可以使用另一种方法。请协助我通过其他测试用例,在此先感谢。这是我的代码:

function factorial(n){
    let myNum = n;
    let res;

    if(myNum === n){
        res = myNum * (n -1);
        myNum = n - 1; 
    }

    if(myNum > 0){
        res = res * (myNum - 1);
        myNum --;
    }
    return res;
}

我不太喜欢阶乘算法的递归。

while 循环工作得很好。对于阶乘,主要情况是我们仍然是 运行 宁方程,而 n 大于 0,所以 1 是我们要相乘的最后一个数字。这是因为我们知道,一旦我们的迭代次数为 1,我们就想停止算法,最后一个数字将保持阶乘。

function factorial(n){
var product = 1
while(n > 0){
    product = product * n
    n = n -1
}
return product  
}

如果你要进行递归,你需要有一个基本案例,你需要考虑什么阶乘最容易解决。所以 factorial(2) 是最小的阶乘数。如果阶乘为 1,我们不想再做减法,因为任何乘以 0 的结果都是 0。

最终方程或基本情况将是 n * 1。

所以这将是递归算法的基本情况。

function factorial(n){
   if (n == 1){
    return n
   }else{
     return n * factorial(n -1)
   }

}

递归和循环在循环中的工作原理类似,JS中{}之间包含的代码是在一定条件下运行。通过递归,我们将代码调用为函数中的自包含模块。我们正在使用函数的条件来操纵参数,以创建函数将停止的情况。否则我们将陷入无限循环。