当我在Chrome中运行此代码时,它会报告“超出最大调用堆栈大小”。
http://codepen.io/tcadams9/pen/JRLyOq
if (randomNum === 0 || randomNum === 1)
return 1;
for (var i = randomNum - 1; i >= 1; i--) {
num *= i;
}
return factorial();
$("#button2").click(factorial);
答案 0 :(得分:0)
您正在使用DOM元素搞乱变量。 ID为“randomNum”的DOM元素值不等于变量randomNum
。要获得该值,您需要$("#randomNum").val()
。
这似乎是递归和非递归方法的混合。你需要清理它:
的显强>
randomNum = 6; //set the value before
function factorial () {
var num =1;
for (var i = randomNum - 1; i >= 1; i--) {
num *= i;
}
return num;
}
和
$("#button2").click(function () {
randomNumber = $("#randomNumber").val();
$("#Factorial").html(
factorial()
)
})
或
的递归强>
function factorial (randomNum) {
if (randomNum === 0 || randomNum === 1)
return 1;
return randomNum * factorial(randomNum-1);
}
但是,你不能通过'click'调用该函数,因为它没有给出randomNumber
参数。
要解决此问题,您需要将evenHandler的注册更改为
$("#button2").click(function () {
$("#Factorial").html(
factorial($("#randomNumber").val())
)
})
经过测试,它运行良好。