JavaScript递归函数multiply中(n-1)与arr[n-1]的作用疑问
关于递归函数中n-1的作用解释
你给出的multiply函数作用是计算数组arr中前n个元素的乘积,两个n-1分别服务于递归逻辑和数组索引规则,具体解释如下:
- 第一个
n-1(multiply(arr, n - 1)中的参数)
递归的核心是把大问题拆解为规模更小的同类型子问题。要计算前n个元素的乘积,等价于「前n-1个元素的乘积」乘以「第n个元素」。这里传入n-1就是将子问题的计算规模缩小1,每次递归都把需要计算的元素数量减1,直到触发n<=0的终止条件返回1(乘法的单位元,不会影响最终乘积结果)。如果这里不写n-1直接传n,问题规模永远不会缩小,就会出现无限递归导致栈溢出。 - 第二个
n-1(arr[n - 1]中的索引)
因为JavaScript数组是0起始索引的,数组中第1个元素对应下标0,第2个对应下标1,以此类推,你要取的前n个元素里的第n个元素,对应的下标就是n-1。如果这里直接写arr[n],取到的就是数组第n+1位的元素,当n等于数组长度时,会取到超出数组范围的undefined,最终计算结果就会变成NaN。
举个实际运行示例验证:
传入arr = [2,3,4],n=3,计算过程如下:multiply([2,3,4], 3) = multiply([2,3,4], 2) * arr[2] // 乘4 multiply([2,3,4], 2) = multiply([2,3,4], 1) * arr[1] // 乘3 multiply([2,3,4], 1) = multiply([2,3,4], 0) * arr[0] // 乘2 multiply([2,3,4], 0) = 1 最终结果:1 * 2 * 3 * 4 = 24,和前3个元素的乘积一致
内容的提问来源于stack exchange,提问作者LightSolverCode
相关产品推荐
相关产品推荐

