我参加freecodecamp课程是创建Factorialize
函数的其中一个练习,我知道有几种方法可以做到这一点,但不确定这个有什么回归 5
function factorialize(num) {
var myMax = num;
var myCounter = 1;
var myTotal = 0;
for (i = 0; i>= myMax; i++) {
num = myCounter * (myCounter + 1);
myCounter++;
}
return num;
}
factorialize(5);
答案 0 :(得分:5)
这是您问题的递归解决方案:
function factorialize(num) {
if(num <= 1) {
return num
} else {
return num * factorialize(num-1)
}
}
factorialize(5)
这是迭代解决方案:
function factorialize(num) {
var cnt = 1;
for (var i = 1; i <= num ; i++) {
cnt *= i;
}
return cnt;
}
factorialize(5)
用参数5,它将返回5!或120.
答案 1 :(得分:1)
要回答您的问题,为什么您的功能会返回5: 您的函数永远不会到达for循环的内部部分,因为您的测试是否大于myMax而不是小于。 所以你只需要输入五个输入参数。
但循环不计算num的阶乘,它只将(num + 1)乘以(num + 2);
答案 2 :(得分:0)
也许你会考虑另一种方法。
此解决方案具有非常简短的功能,可显示递归样式和隐式类型转换的可能性:
function f(n) { return +!~-n || n * f(n - 1); }
function f(n) { return +!~-n || n * f(n - 1); }
var i;
for (i = 1; i < 20; i++) {
console.log(f(i));
}
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 3 :(得分:0)
这是解决这一挑战的另一种方法,我知道它既不是最短的也不是最简单的,但它仍然是一种有效的方式。
function factorialiaze(num){
var myArr = []; //declaring an array.
if(num === 0 || num === 1){
return 1;
}
if (num < 0){ //for negative numbers.
return "N/A";
}
for (var i = 1; i <= num; i++){ // creating an array.
myArr.push(i);
}
// Reducing myArr to a single value via .reduce:
num = myArr.reduce(function(a,b){
return a * b;
});
return num;
}
factorialiaze(5);
答案 4 :(得分:0)
尝试此功能
const factorialize = (num) => num === 0 ? 1 : num * factorialize(num-1)
像这样使用:
factorialize(5) // returns 120
答案 5 :(得分:0)
试试这个:
function factorialize(num) {
var value = 1;
if(num === 1 || num ===0) {
return value;
} else {
for(var i = 1; i<num; i++) {
value *= i;
}
return num * value;
}
}
factorialize(5);
答案 6 :(得分:0)
// My solution
const factorialize = num => {
let newNum = 1;
for (let i = 1; i <= num; i++) {
newNum *= i
}
return newNum;
}
答案 7 :(得分:0)
我喜欢语法糖,所以
let factorialize = num => num <= 1 ? num : num * factorialize(num -1)
factorialize(5)