function FirstFactorial(num) {
for(var i = num - 1; i > 0; i--) {
return num * i;
}
};
console.log(FirstFactorial(8))
我只是想知道写这样的代码是什么不打印阶乘?相反,我只得到56,这是8 * 7.我认为如果我使用for循环它会继续吗?
答案 0 :(得分:1)
当你使用return时,它会转义函数并返回第一个num*i
,以防止它,在你的函数中创建一个局部变量并在循环结束时返回它。
示例:强>
function FirstFactorial(num) {
var result=1;
for(var i = num - 1; i > 0; i--) {
result *= i;
}
return result
};
答案 1 :(得分:1)
你传球8并乘以8 * 7并返回56.你没有累积。你需要一些递归:
function FirstFactorial(num)
{
if (num == 1)
return num;
else
return num * FirstFactorial(num - 1);
}
答案 2 :(得分:1)
使用:
for(var i = num - 1; i > 0; i--) {
return num * i;
}
它将返回num*(num-1)
值。因为它将在第一次迭代中返回值。
改为使用:
使用递归:
function FirstFactorial(num) {
if(num==1)
return num;
else
return num*(FirstFactorial(num-1))
}
或:
fact=num;
for(var i = num - 1; i > 0; i--) {
fact*=i;
}
return fact;
编辑:根据OP的要求解释返回在递归方法中的作用。
关于递归:
return num*FirstFactorial(num-1)
实际上首先将num
与FirstFactorial(num-1)
的返回值相乘,即(n-1)!
。因此实际会发生的是:
FirstFactorial(num-1)
被调用。 (使用参数num-1
调用FirstFactorial函数。FirstFactorial(num-1)
的{{1}}的返回值乘以(num-1)!
的值,以获得num
。num!
或num!
FirstFactorial()
会返回此值(num
)
醇>
现在在FirstFactorial(num)
内调用FirstFactorial(num-1)
时,将再次执行FirstFactorial函数,检查第一个if条件。如果失败,则返回FirstFactorial(num)
的值。如果满足条件并且在不再次调用(n-1)*FirstFactorial(num-1 - 1)
的情况下返回值,则将递归到第一个。
您还可以将该功能视为:
FirstFactorial
答案 3 :(得分:0)
尝试类似:
Stacktrace:
ReferenceError: before is not defined
at [object Object].<anonymous> (/myApp/tests/e2e/routes.js:10:5)
at normalLoader (/myApp/node_modules/babel-core/lib/babel/api/register/node.js:160:5)
at Object.require.extensions.(anonymous function) [as .js] (/myApp/node_modules/babel-core/lib/babel/api/register/node.js:173:7)
at require (module.js:380:17)
at Function.promise (/myApp/node_modules/protractor/node_modules/q/q.js:650:9)
at _fulfilled (/myApp/node_modules/protractor/node_modules/q/q.js:797:54)
at self.promiseDispatch.done (/myApp/node_modules/protractor/node_modules/q/q.js:826:30)
at Promise.promise.promiseDispatch (/myApp/node_modules/protractor/node_modules/q/q.js:759:13)
at /myApp/node_modules/protractor/node_modules/q/q.js:525:49
at flush (/myApp/node_modules/protractor/node_modules/q/q.js:108:17)
at process._tickCallback (node.js:419:13)
当你说function FirstFactorial(num) {
var fact = 1;
for(var i = num; i > 0; i--) {
fact = fact * i; //here you are returning on your first iteration iteslef and hence issue
}
return fact;
};
console.log(FirstFactorial(8))
时,它会中止方法调用并返回父级,并返回你返回的值(如果有的话)。所以在你的情况下,它将返回8 * 7 = 56
答案 4 :(得分:0)
您在第一次循环迭代时返回值,而不是在结束时。这应该可以解决问题:
var
答案 5 :(得分:0)
你的for循环迭代一次因为有一个返回,你应该存储在一个变量中并在循环迭代后返回。
function factorial(num) {
var result = num;
for (var i = num - 1; i > 0; i--) {
result = result * i;
}
return result;
}
注意factorial是递归的候选者:
function factorial(num) {
if (num > 0) {
return num * factorial(num - 1);
} else {
return 1;
}
}