Javascript 请帮助我理解这个递归问题

Javascript 请帮助我理解这个递归问题,javascript,arrays,recursion,frontend,Javascript,Arrays,Recursion,Frontend,如果我将数组和n的值传递为5,那么我不理解这个函数是如何工作的 return multiply([1,2,3,4,5],4)*arr[4] 这是函数过程中要发生的第一行 谁能给我解释一下这句话吗 function multiply(arr, n) { if (n <= 0) { return 1; } else { return multiply(arr, n - 1) * arr[n - 1];

如果我将数组和n的值传递为5,那么我不理解这个函数是如何工作的

return multiply([1,2,3,4,5],4)*arr[4] 
这是函数过程中要发生的第一行

谁能给我解释一下这句话吗

function multiply(arr, n) {

        if (n <= 0) {
            return 1;
        } else {
            return multiply(arr, n - 1) * arr[n - 1];
        }
    }
    let a = [1, 2, 3, 4, 5];
//calling function
    multiply(a, 5);
函数乘法(arr,n){

如果(n此函数将数组的前两个元素相乘,然后将它们的乘积与数组中的下一个元素相乘。这将一直持续到数组中达到索引,该索引等于作为第二个参数传递给函数的数字

如果第二个参数大于数组的长度,则会得到
NaN

下面是每个递归调用的细分:

第一次呼叫:

参数:arr=[1,2,3,4,5],n=5

返回:乘(arr,4)*a[4]

第二次呼叫:

参数:arr=[1,2,3,4,5],n=4

返回:乘(arr,3)*a[3]

第三次呼叫:

参数:arr=[1,2,3,4,5],n=3

返回:乘(arr,2)*a[2]

第四次呼叫:

参数:arr=[1,2,3,4,5],n=2

返回:乘(arr,1)*a[1]

第五次呼叫:

参数:arr=[1,2,3,4,5],n=1

返回:乘(arr,0)*a[0]

第六次呼叫:

参数:arr=[1,2,3,4,5],n=0

回报:1

最后一个递归调用(第六个调用)返回1

因此,第五次调用获取第六次调用的返回值,并返回
乘法(arr,0)*a[0]=1*1=1

第四次调用获取第五次调用的返回值,并返回
乘法(arr,1)*a[1]=1*2=2

第三次调用获取第四次调用的返回值,并返回
乘法(arr,2)*a[2]=2*3=6

第二次调用获取第三次调用的返回值,并返回
乘法(arr,3)*a[3]=6*4=24


第一次调用获取第二次调用的返回值并返回
乘法(arr,4)*a[4]=24*5=120

我已编辑了您的问题。请注意格式和不必要的大写字母,以便您的问题更具可读性。不需要大写字母锁定和叫喊。尝试“在纸上”功能-写下每一次调用发生了什么以及数据看起来如何。或者尝试放置一些
控制台。记录
以查看什么是
arr
n-1
arr[n-1]
乘法
最终返回
1
,这意味着您将得到如下结果:
((((1*1)*(1*2))*(1*3))*(1*4))*5