我有以下代码,但它没有为factorial提供完美的结果,你可以找到它plz
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> New Document </title>
<script type="text/javascript">
function fact(num)
{
var x=parseInt(num);
//alert(x+1);
if(x>0)
x=x* fact(x-1);
alert(x);
}
</script>
</head>
<body>
<form name="f1">
Enter the Number :<input type="text" length="8" name="txt1"><br>
<input type="button" value="Find factiorial" onclick="fact(txt1.value)">
</form>
</body>
</html>
答案 0 :(得分:23)
您必须return
该值。你走了:
function fact(x) {
if(x==0) {
return 1;
}
return x * fact(x-1);
}
function run(number) {
alert(fact(parseInt(number, 10)));
}
和
<input type="button" value="Find factiorial" onclick="run(txt1.value)">
(如何使它适用于我留给你的负数;)(但无论如何我都在这篇文章中展示过))
只是为了好玩,一个更正确,非递归的算法:
function fact(x) {
if(x == 0) {
return 1;
}
if(x < 0 ) {
return undefined;
}
for(var i = x; --i; ) {
x *= i;
}
return x;
}
答案 1 :(得分:5)
使用循环易于实现
function fact(num)
{
if(num<0)
return "Undefined";
var fact=1;
for(var i=num;i>1;i--)
fact*=i;
return fact;
}
<input type="button" value="Find factiorial" onclick="alert(fact(6))">
答案 2 :(得分:3)
function factorial(n) {
return (n != 1) ? n * factorial(n - 1) : 1;
}
alert( factorial(5) );
您可以尝试使用递归方法
答案 3 :(得分:2)
alert
之外,你并没有对返回的值做任何事情。如果您愿意(将鼠标悬停在文字上方),请尝试使用此选项:
if(x==0) return 1;
return x * fact(x-1);
答案 4 :(得分:2)
首先,您需要在功能中使用return
。 ;)
答案 5 :(得分:1)
这是最简单的方法和最新的JS(ES6)
factorial = n => n - 1 > 0 ? n * factorial(n - 1) : n;
//output
console.log(factorial(5));
在这里,我使用了ES6箭头功能。为了更好地理解,请查看什么是arrow function。
答案 6 :(得分:1)
这是一个简短的递归版本:
function doFact(n) {
return +!(+(n)) || doFact(n - 1) * n;
}
function factorialFromInput() {
var theInputVal = document.getElementsByTagName("input")[0].value;
var theContainer = document.getElementById("resultContainer");
theContainer.innerHTML = "" + doFact(Math.abs(theInputVal));
}
&#13;
.wrapper>* {
line-height: 2em;
width: 30%;
}
#resultContainer {
border: outset grey;
min-height: 1.1em;
padding-left: 0.3em;
background-color: #eff0f1;
overflow: scroll;
}
&#13;
<div class="wrapper">
<input type="text" id="valEntered">
<br>
<button onclick="factorialFromInput();">Calculate Factorial</button>
<br>
<div id="resultContainer"></div>
</div>
&#13;
答案 7 :(得分:1)
我写了这个并且它有效。
var d = 1;
for (num; num > 1; num--) {
d *= num;
}
return d;
&#13;
答案 8 :(得分:1)
function fact(n) {
if (n > 1) {
return n * fact(n-1);
} else {
return 1;
}
}
console.log(fact(5));
使用三元运算符,我们将上述代码替换为以下一行代码
function fact(n) {
return (n != 1) ? n * fact(n - 1) : 1;
}
console.log(fact(5));
答案 9 :(得分:0)
我对javascript很陌生,很高兴知道可以对此答案进行任何改进
final _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Edit Card')),
body: _isLoading
? CircularProgressIndicator()
: Form( // <-- add this widget
key: _formKey, // <-- set the key
child: Column(
children: [
TextFormField(
//key: _formKey, // <-- remove this
controller: controller,
initialValue: _card,
maxLines: null,
onSaved: (value) {
_changedCard = value;
},
),
ElevatedButton(
child: Text('Save Changes'),
onPressed: () {
if(_formKey.currentState.validate()) { // <-- this is recommended
_formKey.currentState.save();
}
_changedCard = controller.text;
sendCard(_changedCard, cardId);
Navigator.pop(context);
},
),
],
),
),
);
}
答案 10 :(得分:0)
我已经看到许多地方都使用了递归方法(Eloquent JavaScript等)。在这里,该函数被递归调用,直到达到0,事实并非如此。我们应该只调用该函数直到> = 2,因为我们需要乘以的最后一个数字是1。
这是一个很小的更改,可能没有关系。好奇地知道其他人怎么看。假设它是一个有效的正整数。
/**
* Popular approach - the recursive function is called till x is 0
*
* @param x
*/
function popularFactorial(x) {
console.log(x)
if(x === 0) {
return 1
} else {
return x * popularFactorial(x - 1)
}
}
var result = popularFactorial(8)
console.log(result)
/**
* Using this approach, the recursive function is called one less time
* i.e till x is 1
*
* @param x
*/
function factorial(x) {
console.log(x)
if(x === 0) {
return 1
} else if(x >= 2) {
return x * factorial(x - 1)
}
return x
}
var result = factorial(8)
console.log(result)
答案 11 :(得分:0)
function factorial (n) {
if (n > 1) {
return n * factorial(n-1);
}
return 1;
}
console.log("recursive way => ",factorial(5));
答案 12 :(得分:0)
function factorial(num){
if(num<1||typeof num!=='number'){
return undefined
}
if(num===1){
return num
}
return num*factorial(num-1)
}
console.log(factorial(3))
答案 13 :(得分:0)
function factorial(n) {
return [...Array(n + 1).keys()].slice(1).reduce((total, currentValue) => total * currentValue, 1);
}
答案 14 :(得分:0)
//This is fastest way to implement factorial
const fact = n => !n ? 1 : n * fact(--n);
console.log(fact(10))
答案 15 :(得分:0)
<table>
<tr>
<th>Amount of integers</th>
<th>Answer</th>
</tr>
<tr>
<th><input id="int" type="number"/></th>
<th><input id="answer" type="number"/></th>
</tr>
</table>
<button onclick="calculate()">calculate</button>
<script>
function calculate() {
var input = document.getElementById("int").value;
var int = 1;
do {
var product = int *= input;
input--;
} while (input > 0);
answer.value = product;
}
</script>
您首先设置一个表格作为输入变量的方式,并有一个输出答案的位置。您还可以添加一个按钮来执行您的功能。
输入变量是用户输入的值。你也有int变量作为占位符。
在do循环中你接着另一个变量是产品,它取你的占位符变量并按输入计时。在此之后输入递减,只要输入值大于零,循环就会继续迭代。
然后在最后,它会将答案发布到表格中的'answer'id标签。
答案 16 :(得分:0)
var factorialNumber , factorial=1;
factorialNumber=prompt("Factorial Number" , "write Factorial Number");
for(var i = 1; i<= factorialNumber;i++){
factorial *= i;
}
alert(factorial);
上面的代码首先定义了两个变量factorialNumber
和factorial
。 factorial
初始化为factorialNumber
将获得prompt
(预期数字)的结果,然后,使用循环,在每个步骤中,factorial乘以索引步骤,由i
表示。成功计算后,我们会使用alert
显示结果。
答案 17 :(得分:0)
{{include.file}} {{include.caption}}
答案 18 :(得分:0)
一种非常简单的形式:
function fact() {
var x = document.getElementById("txtf").value;
var f=1;
for (var i=1; i <= x ; i++){
f = f*i;
}
document.getElementById('showR').innerHTML= f;
}
<input type="text" id="txtf" value="3">
<input type="button" id="btnf" value="click for calculate" onclick="fact()">
<p id="showR">/Factoriel/</p>
答案 19 :(得分:0)
JS中的递归对堆栈溢出错误开放,也非常慢。通过其他方式循环更好。我对阶乘代码的贡献将是单个衬垫;
var fact = n => Array(n).fill().reduce((v,_,i) => (i+1) * v || 2);
console.log(fact(5));
答案 20 :(得分:0)
我不确定为什么没有人使用动态编程来回答这个问题,在我看来,这是迄今为止构建基于因子的最有效方法。
var mem = [];
function fact(num)
{
var x = parseInt(num);
if (x == 0 || x == 1) return 1;
mem[x] = x * fact(x-1);
return mem[x];
}
答案 21 :(得分:0)
<script src="jquery-3.1.0.js"></script>
<script>
$(function () {
var target = 5;
var factorial = 1;
for (var i = 1; i <= target; i++) {
factorial *= i;
}
alert(factorial);
});
</script>
谢谢...:)
答案 22 :(得分:0)
这是我使用while循环创建的:
function factorialize(num)
{
i = 1;
b = 1;
while (i < num) {
b = b + (b * i);
i = i + 1;
}
return b;
}
答案 23 :(得分:0)
我的建议:
function fact(x) {
if (x<0) {
return Infinity
};
var _= 1
for ($=1;$<=x;++$) {
_*=$
};
return _
};
它只返回任何&#34; x&#34;的因子。是
答案 24 :(得分:0)
怎么样:
function fact(n) {
n = Math.round(n);
if (n < 2) {
return 1;
}
else {
return n * fact(n - 1);
}
}
答案 25 :(得分:0)
对安东的代码略微编辑:
function fact(x) {
if(x>0)
return x* fact(x-1);
if(x===0)
return 1;
return null;
}
(负数的阶乘不存在,但0的阶乘等于1,在这种情况下,如果数字小于0,则函数将返回null)
答案 26 :(得分:0)
1)当X = 0时,函数应返回1; 2)增加了回报;
function fact(num)
{
var x=parseInt(num);
//alert(x+1);
if(x>0)
x=x* fact(x-1);
else
x=1;
return x;
}
使用
<input type="button" value="Find factiorial" onclick="alert(run(fact.value));">
答案 27 :(得分:0)
该功能的重要部分是这一行:
x = x * fact(x-1);
但fact
函数未返回值,因此这与x * undefined
相同。尝试将return x;
添加到您的函数底部。