Js中的递归



谁能给我解释一下为什么我们需要(n-1)在以下代码

function multiply(arr, n) {
if (n <= 0) {    
return 1;
} else {
return multiply(arr, n - 1) * arr[n - 1];
}
}

我知道我们有一个if (n <= 0){return 1}的基本情况,以便代码永远不循环,但我不理解return multiply(arr, n - 1) * arr[n - 1];递归情况下的(n-1)[n-1]

任何帮助都非常感谢。

看起来这个函数应该从数组的最后一个元素开始,然后递归地操作前面的每个元素。这就是为什么在递归调用函数时,必须传入下一个较早的元素,即n-1。这使得函数在每次迭代中更接近基本情况。

这个函数只是将给定数组的所有元素相乘。一开始你必须传递数组和它的长度为n

数组的最后一个元素是n-1。因此,在第一次迭代时,它将取最后一个元素并进一步相乘,直到它达到0。然后它会停止。

尝试运行这个函数精神在你的脑海中一些简单的例子,你就会得到它。

这个函数可以改进,但是您可以通过添加一些调试日志来理解它的原样…

function multiply(arr, n) {
if (n <= 0) {
return 1;
} else {
console.log(`recurse to multiply ${arr[n-1]} by elements in [${arr.slice(0,n-1)}]`);
return multiply(arr, n - 1) * arr[n - 1];
}
}
multiply([1, 2, 3], 3);

更清晰的实现将不需要长度参数,并且更清晰地分解…

// if the array has a first element, multiply it by the remainder of the array
function multiply(arr) {
return arr.length ? arr[0] * multiply(arr.slice(1)) : 1;
}
console.log(multiply([1,2,3]))

相关内容

  • 没有找到相关文章

最新更新