我希望有人基本上帮助我理解每行代码的作用,并帮助我评论每一行(如果适用),以便它可以帮助向另一个人解释它正在做什么。如果能够给出第二只眼睛并确保代码实际上是好的,那就太棒了 - 我正试图让我的头围绕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));
非常感谢您对此的帮助 - 道歉如果已经得到答复,如果已经发布,请将我指向另一个帖子。谢谢!
答案 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