首页 > 解决方案 > 为什么我的基本递归无限循环?

问题描述

let data = [1, 2, 3]
let sorted = []

let push = function(i) {
  while(i<data.length) {
    sorted.push(data[i])
    push(i + 1)
  }
}

push(0)

大家好,

我正在写一些基本的递归,它似乎没有退出。很抱歉这个基本问题,但我希望有人能解释一下。

预期行为:模仿 for 循环 - 遍历数组并推送到新数组。当我们到达时退出i == data.length

实际行为:运行 0、1、2,然后运行 ​​2,直到堆栈溢出。

代码小提琴:https ://jsfiddle.net/t579jbog/

标签: javascriptarraysfunctionrecursioniteration

解决方案


您应该使用ifnot while,并确保i在递归调用中使用不同的值。

let data = [1, 2, 3]
let sorted = []

let push = function(i) {
  if (i < data.length) {
    sorted.push(data[i]);
    push(i + 1);
  }
}

push(0);

console.log(sorted);


推荐阅读