用JavaScript打印数字的递归函数

Recursive function to print numbers in JavaScript

本文关键字:递归函数 数字 打印 JavaScript      更新时间:2023-09-26

我正在尝试制作一个递归函数,用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);  

但上面代码的问题是它会发生得太快,以至于你不会注意到数字19的打印。如果您想查看这些数字,那么我建议您将该值附加到占位符$('#text')
但是,如果你真的想看到这些数字被打印出来,然后被下一个数字取代,那么你可以参考其他使用setInterval/setTimeout的用户发布的答案。