fg7*_*8nc 0 javascript recursion
我无法理解为什么以下代码段会导致错误.有任何想法吗?
超出最大调用堆栈大小
function reverseArrayInPlace(array, low, high) {
if (low == undefined) {
low = 0;
}
if (high == undefined) {
high = array.length - 1;
}
if (low >= high) {
return;
}
var temp = array[low];
array[low] = array[high];
array[high] = temp;
return reverseArrayInPlace(array, low++, high--);
}
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);Run Code Online (Sandbox Code Playgroud)
这是因为你正在使用后增量和后减量.它递增/递减变量,但返回旧值,因此您在递归中传递旧值.因此,递归调用与原始调用相同,并且无限递归.
预增量/减量 - ++low和--high- 将正常工作.但是您根本不需要更新变量,因为您再也不会使用它们.只做正常的加法/减法.
return reverseArrayInPlace()在进行递归调用时,使用它也没有意义,因为基本情况不会返回任何内容.只需进行递归调用而不将其放在return语句中.
function reverseArrayInPlace(array, low, high) {
if (low == undefined) {
low = 0;
}
if (high == undefined) {
high = array.length - 1;
}
if (low >= high) {
return;
}
var temp = array[low];
array[low] = array[high];
array[high] = temp;
reverseArrayInPlace(array, low + 1, high - 1);
}
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);Run Code Online (Sandbox Code Playgroud)