下面的代码如何给出与后面的代码相同的结果?我在试着理解递归

  • 本文关键字:代码 递归 结果 recursion
  • 更新时间 :
  • 英文 :

function multiply(arr, n) {
let product = 1;
for (let i = 0; i < n; i++) {
product *= arr[i];
}
return product;
}

freecode-camp课程中的一节指出,上面的代码与下面的代码产生相同的结果;我想把我的头绕起来,谁来帮帮我吧;

假设我们使用一个包含1、2、3、4、5和n(5)的数组。

multiply(arr, n) == multiply(arr, n - 1) * arr[n - 1]

顶部(迭代)代码返回数组元素的乘积。

第二个的作用可以通过重复替换看到:

multiply(arr, 5) == multiply(arr, 5 - 1) * arr[5 - 1]
== multiply(arr, 4) * arr[4]
== (multiply(arr, 4 - 1) * arr[4 - 1]) * arr[4]
== multiply(arr, 3) * arr[3] * arr[4]
== (multiply(arr, 3 - 1) * arr[3 - 1]) * arr[3] * arr[4]
== multiply(arr, 2) * arr[2] * arr[3] * arr[4]
== (multiply(arr, 2 - 1) * arr[2 - 1]) * arr[2] * arr[3] * arr[4]
== multiply(arr, 1) * arr[1] * arr[2] * arr[3] * arr[4]
== (multiply(arr, 1 - 1) * arr[1 - 1]) * arr[2] * arr[3] * arr[4]
== multiply(arr, 0) * arr[0] * arr[1] * arr[2] * arr[3] * arr[4]

此时进程应该停止,multiply(arr,0)返回1,但您的定义遗漏了这部分。

最新更新