Javascript 请帮助我理解这个递归问题
如果我将数组和n的值传递为5,那么我不理解这个函数是如何工作的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];
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