我正在尝试编写一段代码来解决Coderbyte挑战,以计算一个数字的阶乘。每次运行它时,生成的阶乘就是一个。我究竟做错了什么?
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
};
答案 0 :(得分:0)
这是计算数字阶乘的一种更简单的方法。
function factorial(num)
{
if(num === 1)
{
return num;
}
return num * factorial(num - 1);
}
但是要修复代码,您需要修复将数字加载到数组中的初始循环。以及删除底部循环中的return语句。像这样。
function FirstFactorial(num) {
for (var i = num; i>0; i--) {
array1[num - i] = i;
};
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
};
答案 1 :(得分:0)
一些问题。
1 /这是次要的,但是,当你乘以两个数字时,你会得到一个产品,而不是一个总和。
2 /你在循环中从返回了值,这意味着即使你修正了其他问题,它也会过早地返回而不会使所有数字成倍增加。
3 /您的嵌套循环没有按照您描述的方式填充数组,您应该在填充后检查它。想想你的循环表示为伪代码:
for i = num downto 1 inclusive:
for y = 0 to num-1 inclusive:
array1[y] = i
您可以看到内部循环使用当前i
的值填充整个数组。因此,外部循环的 last 迭代,其中i
为1,将整个数组设置为1。
4 /在任何情况下,您都不需要数组来存储从1到n
的所有数字,只需使用数字1到n
直。类似的东西(再次,伪代码):
def fact(n):
prod = 1
for i = 2 to n inclusive:
prod = prod * i
return prod