如何制作Javascript阶乘函数?

时间:2018-07-11 19:09:46

标签: javascript

我想用JavaScript编写阶乘函数。我尝试了以下方法:

function factorial(n){
  if(n==1){
    return 1;
  } else {
   while(n>=0){
    n = n * (n-1);
   }
   return n;
 }
}

它不起作用。

6 个答案:

答案 0 :(得分:1)

我们可以通过以下方式做到这一点:

const factorial = (num: number): number => (num === 0) ? 1 : (num * factorial(num - 1));

答案 1 :(得分:0)

您使用了while(n>=0)而不是while(n>=2)。使用n>=0将使while循环的结尾将n乘以0。您还应该使用===运算符来防止非数字值。您还忘记了在n循环中减少while。请尝试以下操作之一:

迭代方法:

function factorial(n){
 var result = n;
 if(n<0){
   return null;
 }
 if(n===1||n===0){
return 1;
 } else {
 while(n>=2){
 result = result * (n-1); 
 n--;
}
return result;
}
}

<script>
 function factorial(n){
     var result = n;
     if(n<0){
       return null;
     }
     if(n===1||n===0){
    return 1;
     } else {
     while(n>=2){
     result = result * (n-1); 
     n--;
    }
    return result;
    }
    }
function calculate(){
   var input = document.getElementById("number").value;
   if(!isNaN(input)&&input.trim().length){
    document.getElementById("result").innerHTML = factorial(parseInt(input, 10));
   } else {
    document.getElementById("result").innerHTML = "<b style='color: red;'>Input must be a number!</b>";
   }
}
</script>
<input type="text" id="number" onkeyup="calculate()">
<br/>
<span id="result"></span>

递归方法:

function factorial(n){
 if(n===0||n===1){
   return 1;
 }
 return n*factorial(n-1);
}

答案 2 :(得分:0)

首先为数字0和1输入数字返回1。如果number大于1,则从2迭代到输入number,并将多个result * i;存储到结果变量中。

function factorial(number) {
  let result = 1;

  for (let i = 2; i <= number; i++) {
    result = result * i;
  }

  return result;
}

答案 3 :(得分:0)

这是我学习数组函数reduce()之后写的一本书

const factorial = n => {
  if (! Number.isInteger(n)) return undefined
  if (n < 0) return undefined
  if (n === 0) return 1

  const array1 = [...Array(n+1).keys()].splice(1)

  return array1.reduce((preVal, curVal) => preVal * curVal)
}

答案 4 :(得分:0)

就像在今天的练习中一样,只需在H S Progr's答案中添加一点即可。在Wikipedia中说0! = 1和1! = 1,因此只需要额外的“确保”即可

const factorial = (n) => (num === 0 || num === 1) ? 1 : (num * factorial(num - 1));

正如我说的那样,我没有学习的优点,但是有任何可能的方法可以确保在我们选择if,else if,while ...或任何其他含义时,我们选择做阶乘,将0和1.具有自己的独特价值。
我的回答中有所有优点(对H R Progr不公开,应咨询Sonya Moisset,他的精彩文章给了我提示。
这是我阅读她的文章后的原始代码:

const factorial = (n) => (n < 0) ? 1 : (n == 0) ? 1 : (n * factorial(n - 1));

答案 5 :(得分:0)

所以下面的代码是这样工作的。 const 获取您要打印到的 html 文档的一部分。 提示接收测试号码。 乐趣从阶乘计算循环开始。 循环通过并继续将数字乘以其阶乘。 如果你输入 8,循环将在完成所有传递后返回 40320。

const html = document.getElementById('root');

// get number
let num1;
do {
    num1 = +prompt("enter number");
}
while (num1 <= 0);

//// factorial calculation using loop

let j = 1;
for (let i = 1; i <= num1; i++) {
    j = j * i;

    //show results on the screen

    html.innerHTML = `
    <p> ${j}</p>
    `;
}