递归中 -1 有什么意义?



在这个代码块中,我试图理解递归的概念,但是,我错过的全部要点是: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

相关内容

  • 没有找到相关文章

最新更新