Javascript 为什么我的阶乘函数总是返回1?
我正试图写一段代码来解决Coderbyte挑战,计算一个数字的阶乘。每次运行它时,生成的阶乘都是1。我做错了什么Javascript 为什么我的阶乘函数总是返回1?,javascript,arrays,Javascript,Arrays,我正试图写一段代码来解决Coderbyte挑战,计算一个数字的阶乘。每次运行它时,生成的阶乘都是1。我做错了什么 var num var array1 = new Array(); function FirstFactorial(num) { for (var i = num; i>0; i--){ // 8 , 7, 6 , 5 for (var y = 0; y<num ; y++){ // 0, 1, 2, 3, 4
var num
var array1 = new Array();
function FirstFactorial(num) {
for (var i = num; i>0; i--){ // 8 , 7, 6 , 5
for (var y = 0; y<num ; y++){ // 0, 1, 2, 3, 4
array1[y]=i; // we have an array that looks like [8,7,6,5,4,3,2,1]
};
};
var sum = 1
for (var x = 0; x<array1.length; x++){ // now I want to run up that array, reading the #s
sum = sum * array1[x];
return sum;
};
return sum
};
var num
var array1=新数组();
函数第一阶乘(num){
对于(vari=num;i>0;i--){//8,7,6,5
对于(var y=0;y,这是一种计算数字阶乘的更简单的方法
函数阶乘(num)
{
如果(num==1)
{
返回num;
}
返回num*factorial(num-1);
}
一些问题
1/这是次要的,但当你将两个数字相乘时,得到的是乘积,而不是和
2/您从循环中返回了值,这意味着,即使您修复了其他问题,它也会过早返回,而不会将所有数字相乘
3/您的嵌套循环没有按照您描述的方式填充数组,您应该在填充后检查它。请考虑将您的循环表示为伪代码:
for i = num downto 1 inclusive:
for y = 0 to num-1 inclusive:
array1[y] = i
def fact(n):
prod = 1
for i = 2 to n inclusive:
prod = prod * i
return prod
您可以看到,内部循环使用当前i
的值填充整个数组。因此,外部循环的最后一次迭代(其中i
为1)将整个数组设置为1
4/在任何情况下,都不需要数组来存储从1到n
的所有数字,只需直接使用数字1到n
。类似(同样,伪代码):
问题是什么?您在上一个for循环中返回sum,通过该循环的第一次迭代将返回,而数组的其余部分将不被处理。请描述问题。@Kvera根据Stackoverflow的质量要求,“寻求调试帮助的问题”(“此代码为什么不起作用?”)必须包括所需的行为、特定的问题或错误,以及在问题本身中重现问题所需的最短代码。没有明确问题说明的问题对其他读者没有用处。““代码不起作用”这还不够。你有没有说明你为什么认为可能?如果你希望人们免费帮助你,请在这个问题上花最少的精力。honerlawd,非常感谢你的关注。你能向我解释一下为什么最初的循环是错误的吗?你在顶部的外循环运行良好,并且分别倒计时从数字到1。但是,您的内部循环从0到7计数。因此,基本上,您使用内部循环启用的任何数字填充数组中的每个索引,并覆盖以前的所有数字。如果这有意义的话。这不就是它应该做的吗?存储array1[0]=8,array1[1]=7等等?对不起,我当然是新手。在第一次迭代中,它会这样做[4,4,4]
在下一次迭代中,它会这样做[3,3,3]
等等,然后停在[1,1,1]
因为外部循环在i=0时终止;
的值不太大。在第一次外部迭代时,它将所有数组值设置为num
。然后将它们全部设置为num-1
,依此类推,最终在最后一次外部迭代中将它们全部设置为1
。