JavaScript - 因子解释

时间:2016-11-07 20:42:43

标签: javascript recursion factorial

我希望有人基本上帮助我理解每行代码的作用,并帮助我评论每一行(如果适用),以便它可以帮助向另一个人解释它正在做什么。如果能够给出第二只眼睛并确保代码实际上是好的,那就太棒了 - 我正试图让我的头围绕Factorial / Recursion,并做了一些研究,并为此找到了这些解决方案。

我得到了这个场景:

对于正n,阶乘是n! = n (n-1)! (例如5!= 5 * 4 * 3 * 2 * 1)*

以下是我在这种情况下发现的内容:

// Prompt user to enter a number to calculate the factorial
var num = prompt("What number do you want to find the factorial of?");

var factorial = function(n) {
    if (n == 0) {
        return 1;
    } else {
        product = 1;
        for (i = 1; i < n; i++) {
            product *= i;
        }
        return product;
    }
}
console.log(factorial(num));

递归

创建递归算法以使用每秒计算阶乘 编号如下例所示:

5! = 5 * 3 * 1 = 15 6! = 6 * 4 * 2 = 48

至于草书部分,它被添加到上面的代码中,并写在下面 -

//  recursive
var factorial = function(n) {
    if (n == 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}
console.log(factorial(num));

非常感谢您对此的帮助 - 道歉如果已经得到答复,如果已经发布,请将我指向另一个帖子。谢谢!

2 个答案:

答案 0 :(得分:1)

你不需要递归:

function GetImageAndConvert(input, output, pageNumber, idx, callback)
{
    gm(input).setFormat('jpeg').noProfile().toBuffer(function(err, buffer) 
    {
         if (!err) 
         {
              console.log('Converted to jpeg');
         }
         else
         {
           // record error here
         }

         callback(buffer, idx);
    });
}

注意:使用关键字&#39; var&#39;在函数内声明局部变量。否则它们会变成全局变量,第二次尝试使用函数时可能会产生错误的结果。

答案 1 :(得分:0)

通常,为Factorial编写函数是编写递归函数的练习。第一个示例代码不是递归的,只是通过迭代地乘以数来计算阶乘的过于复杂的方式,所以我会跳过它。

第二个代码是递归的,它遵循通常数学中阶乘的递归定义:

f: N => N, f(x) = x! = { x < 1 : 1, else : x (x - 1)! }

或等效于JavaScript:

let fac = n => n < 1 ? 1 : n * fac(n - 1);

示例计算的扩展如下所示:

5!
5(4!)
5(4(3!))
5(4(3(2!)))
5(4(3(2(1))))
5(4(3(2(1(0!)))))
5(4(3(2(1(1)))))
120