【发布时间】:2021-10-31 00:00:45
【问题描述】:
我有两段递归代码,打算递归打印出数组的一半,直到我们得到数组长度为 1 的数组。没有变量赋值的代码无限运行,而有变量赋值的代码按预期运行。
任何线索为什么会这样?
无限运行,小心
function half(arr) {
halfway = Math.floor((arr.length) / 2)
console.log(arr)
if (arr.length > 1) {
half(arr.slice(0, halfway));
half(arr.slice(halfway));
}
return
}
half([1, 2, 3, 4, 5]);
不会无限运行
function half(arr) {
halfway = Math.floor((arr.length) / 2)
console.log(arr)
if (arr.length > 1) {
var a = arr.slice(0, halfway);
var b = arr.slice(halfway);
half(a);
half(b);
}
return
}
half([1, 2, 3, 4, 5]);
我认为这里可能存在某种可变性,但我无法想象运行效果会如何。我认为每次调用函数时,我们实际上是在将一个全新的数组传递给函数......
【问题讨论】:
-
var halfway = ...-- 目前halfway是一个被递归调用破坏的全局变量。 -
谁能回答为什么第一个代码不输出[1,2,3,4,5]?
-
@TusharShahi 因为函数调用的可见效果是排队的,但永远没有机会出现,因为无限循环没有结束。
-
@NiettheDarkAbsol 但其他东西会打印出来吗?并且 [1,2,3,4,5] 应该是绝对第一要打印的东西。但不是吗?
标签: javascript arrays recursion