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,但您的定义遗漏了这部分。