【问题标题】:other text cases for basic function challenge in hackerankhackerrank中基本功能挑战的其他测试用例
【发布时间】:2021-03-31 08:09:31
【问题描述】:

我正在尝试解决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;
}

【问题讨论】:

  • “请帮助我”不是问题
  • 这不是问题所描述的,我不明白它是如何通过任何测试用例的。为什么您更喜欢这种方法?
  • 它描述了什么?@CallumMorrisson
  • 问题描述了一个函数,它返回n 的阶乘,你的代码只适用于n = 3,或者我猜,n = 0。您至少需要处理 n = [1-10]。

标签: javascript testing ecmascript-6 automated-tests ecmascript-5


【解决方案1】:

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

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中{}之间包含的是在一定条件下运行的代码。通过递归,我们将代码调用为函数中的自包含模块。我们正在使用函数的条件来操作参数,以创建函数将停止的情况。否则我们将陷入无限循环。

【讨论】:

    猜你喜欢
    • 2017-06-23
    • 2020-06-07
    • 2017-03-22
    • 2020-10-16
    • 2022-07-24
    • 2022-07-12
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    相关资源
    最近更新 更多