为什么我的基本递归无限循环?

时间:2019-07-02 02:51:30

标签: javascript arrays function recursion iteration

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,直到堆栈溢出。

Codefiddle:https://jsfiddle.net/t579jbog/

2 个答案:

答案 0 :(得分:1)

您应该使用if而不是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);

答案 1 :(得分:0)

您可以使用索引的shift()intead(shift()删除数组上的第一项并返回值-可以将其推入排序后的数组中。

然后简单地检查数组长度是否> 0,是否为0-将其传递给同一函数以重做该函数,直到数组为空。

我正在安慰已排序的数组,以证明它每次都在获取值。

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

let push = function(arr) {
    sorted.push(arr.shift())
    console.log(sorted);
    
    if(arr.length > 0) {
      push(arr); 
    }
  }


push(data);