在这个代码块中,我试图理解递归的概念,但是,我错过的全部要点是:sum(arr, n) = sum(arr, n - 1) + arr[n - 1];
我有这个代码块:
function sum(arr, n){
if(n <= 0){
return 0;
} else {
return sum(arr, n - 1) + arr[n - 1];
}
}
console.log(sum([5, 4, 7, 9, 2, 6], 5);
我试图理解表达:sum(arr, n - 1) + arr[n - 1];
是否在:sum(arr, n - 1)
中,n是(index - 1)或(n - 1)是它要添加的数组项的长度。同样,在此完成后,第二个表达式arr[n - 1]是什么?[n- 1]是数组元素吗?因为它在数组中,所以有"[]"
我很抱歉,如果这是愚蠢的或烦人的,但是,如果有人能帮助我指出正确的方向,我真的很感激。
你的函数sum(arr,n)
可以描述为计算arr[0]+...+arr[n-1]
。
等价于arr[0]+...+arr[n-2]+arr[n-1]
等价于sum(arr,n-1) + arr[n-1]
不的唯一情况是n<=0
,在这种情况下和为0。
JavaScript数组和其他索引变量总是从零开始,因此第一个元素是索引#0,而数组的长度是最后一个索引+ 1。
看这里…
var A=['a','b','c','d']; // <--- the "n" here is 4 but the last item is index 3
有四个元素,所以数组长度是4,但最后一个元素的索引号是3,因为索引是....[0,1,2,3] !
因此n-1这样循环的计数器就不会跑过元素的索引。当你有一个递归函数时,你需要以某种方式结束循环,否则循环将继续并将消耗你所有的内存,所以要注意if
if(n <= 0)
return 0
当n <= 0时循环结束并返回0,所以如果你不让n <= 0循环永远不会结束,那么你要实现一个逻辑来做sum(arr, n -1)然后从n减去-1,结果是0循环结束意味着
例子sum(arr, 4 - 1)
sum(arr, 3 - 1)
sum(arr, 2 - 1)
sum(arr, 1 - 1)
0