我想用JavaScript编写阶乘函数。我尝试了以下方法:
function factorial(n){
if(n==1){
return 1;
} else {
while(n>=0){
n = n * (n-1);
}
return n;
}
}
它不起作用。
答案 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>
`;
}