带循环的JavaScript递归

时间:2016-12-05 20:34:06

标签: javascript recursion

我在Node.JS中使用它这是示例代码:

function test(x){
    this.x = x
    for (this.i = 0; this.i < 10; this.i++) {
        console.log(this.x + ' - ' + this.i)
        if (this.x < 3) {
            this.x++
            test(this.x)
        }
    }

}

test(0)

当执行命中test(this.x)时,它将退出for循环。有没有办法启动该功能而不退出for循环?

此代码导出:

0 - 0
1 - 0
2 - 0
3 - 0
3 - 1
3 - 2
3 - 3
3 - 4
3 - 5
3 - 6
3 - 7
3 - 8
3 - 9

所需的输出是:

0 - 0
0 - 1
0 - 2
0 - 3
0 - 4
0 - 5
0 - 6
0 - 7
0 - 8
0 - 9
1 - 0
1 - 1
1 - 2
1 - 3
1 - 4
1 - 5
1 - 6
1 - 7
1 - 8
1 - 9
2 - 0
2 - 1
2 - 2
2 - 3
2 - 4
2 - 5
2 - 6
2 - 7
2 - 8
2 - 9
3 - 0
3 - 1
3 - 2
3 - 3
3 - 4
3 - 5
3 - 6
3 - 7
3 - 8
3 - 9

2 个答案:

答案 0 :(得分:3)

你只需要将递归移出for循环:

function test(x){
    for (var i = 0; i < 10; i++) {
        console.log(x + ' - ' + i)
    }
    if (x < 3) {
        test(x + 1)
    }
}

test(0)

答案 1 :(得分:1)

我不清楚为什么你使用递归一个for循环来完成相同的任务。仅使用递归就可以轻松生成所需的结果:

function test(x, y) {
  if (x > 3) {
    return;
  }
  
  if (y === undefined) {
    y = 0;
  } else if (y > 9) {
    return test(x + 1);
  }
  
  console.log('%d - %d', x, y);
  test(x, y + 1);
}

test(0);