用JavaScript打印数字的递归函数
Recursive function to print numbers in JavaScript
我正在尝试制作一个递归函数,用JavaScript打印1到10,我目前的代码是:
function rec10(x)
{
if (x < 10)
{
$('#text').val(x+1);
x = x+1;
rec10(x);
}
}
问题是,每次我激活这个功能时,文本框只直接显示"10",我希望代码从0移动到1,从2…直到10。在文本框中显示其中的每一个。我试着使用setInterval和setTimeout,但我不知道如何使用它们。非常感谢
而不是:
rec10(x);
调用
setTimeout(function() { rec10(x); }, 1000);
使用setInterval
,您可以使用以下代码:
function rec10(x) {
var interval = setInterval(function() {
if (x >= 10) clearInterval(interval);
$('#text').val(x++);
}, 1000);
}
JavaScript是单线程的,这意味着当您的代码运行时,在代码完成之前,您对DOM所做的更改不会在浏览器上看到。
你需要给浏览器几秒钟的控制权,这可以用setTimeout
:完成
function rec10(x){
if (x < 10){
$('#text').val(++x);
setTimeout(function(){
rec10(x);
},20);
}
}
您使用setInterval
/setTimeout
仅仅是因为您不能生成一个有效的递归函数吗
如果是这样的话,下面这个递归函数不使用setInterval
/setTimeout
:怎么样
function rec10(x) {
if (x <= 10) {
if (x <= 0) x = 1;
//append?
$('#text').val(x);
rec10(x + 1);
}
}
rec10(1);
但上面代码的问题是它会发生得太快,以至于你不会注意到数字1
到9
的打印。如果您想查看这些数字,那么我建议您将该值附加到占位符$('#text')
中
但是,如果你真的想看到这些数字被打印出来,然后被下一个数字取代,那么你可以参考其他使用setInterval
/setTimeout
的用户发布的答案。
相关文章:
- 递归函数中断
- 将jQuery对象传递到setTimeout递归函数中
- 对象与递归函数的比较
- 循环内部的递归函数未按预期工作
- 递归函数返回不正确
- 递归函数编程困境
- 给定一个带有数字的数组,我如何编写一个递归函数,当 2 个元素加起来为一个目标时,它会在数组中查找索引
- 返回不会退出 javascript 中的递归函数
- jquery递归函数转换为非递归函数
- AngularJS,promise带有递归函数
- 如何停止此递归函数
- 如何将下面的递归函数转换为纯函数
- jQuery setTimeout ajax递归函数在即时消息程序中短时间后抛出错误
- Javascript递归函数引用了这一点
- 如何将这个递归函数转换为迭代函数
- jQuery递归函数调用和Javascript之间有区别吗;s setInterval
- 从javascript中的递归函数获取undefined
- 将递归函数转换为异步 CPS 实现 (javascript)
- 我怎样才能把它变成一个循环,而不是一个递归函数
- 用JavaScript打印数字的递归函数