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

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

密码:https://jsfiddle.net/t579jbog/

最佳答案

您应该使用 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);

关于javascript - 为什么我的基本递归无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56844694/

相关文章:

javascript - 如何使用 Javascript 将 Google map 转换为 PDF?

c++ - 传递给函数的数组参数不是常量指针吗?

arrays - 使用 dataweave 重命名和删除同一数组中的属性

python - 我可以使用列表来寻址 numpy 数组吗?

c - 关于 vector 和函数的练习

c++ - 在 main.cpp 中而不是在头文件中定义函数是不好的做法吗?

javascript - 根据谷歌表格脚本中的唯一ID同步行数据

javascript - 在azure上部署node.js + socket.io后端/服务器

javascript - 将 NodeJs MySQL 结果转换为可访问的 JSON 对象

c# - C# 中的泛型和函数