Ala*_*rds 0 javascript recursion
我在 FreeCodeCamp.org 上遇到了这个问题(链接到下面的问题),我想知道是否有人可以帮助我更好地理解为什么在使用 sum([2, 3, 4], 1); 调用时等于 2;我坐下来看了一会儿,但在理解它是如何工作时感到精神上受阻。简单的开发人员试图理解 Javascript 中的递归。
任何帮助将非常感激!感谢互联网!
function sum(arr, n) {
if(n <= 0){
return 0;
}else {
return sum(arr, n - 1) + arr[n - 1];
}
}
sum([2, 3, 4], 1) // Returns 2
Run Code Online (Sandbox Code Playgroud)
实际上,等于n非常1简单。让我们一步步检查一下。这是你的sum功能;让我们添加一些行以方便参考:
1: function sum(arr, n) {
2: if(n <= 0){
3: return 0;
4: }else {
5: return sum(arr, n - 1) + arr[n - 1];
6: }
7: }
Run Code Online (Sandbox Code Playgroud)
现在,让我们一步步看看执行时会发生什么:
sum([2, 3, 4], 1)
Run Code Online (Sandbox Code Playgroud)
该函数通过equals to和equals tosum调用。arr[2, 3, 4]n1
由于n不小于或等于 0(第 2 行),因此我们转到else第 行的块5。
现在,这里是递归发生的地方:我们再次调用函数sum,传递相同的arr,但不相同的n,而是传递n - 1。
所以我们sum再次调用,这次 with arrequals to[2, 3, 4]但 with nequals to 0。从n此时起0,在第2 行检查,我们继续执行第 3 行并返回0。
现在,函数退出,并带有0我们提供给调用者的值。
的调用者sum([2, 3, 4], 0)是执行sum([2, 3, 4], 1),特别是在第 5 行:
5: return sum(arr, n - 1) + arr[n - 1];
Run Code Online (Sandbox Code Playgroud)
既然它返回了0,我们可以像这样成像:
5: return 0 + arr[n - 1];
Run Code Online (Sandbox Code Playgroud)
请记住,n所以1:
5: return 0 + arr[0];
Run Code Online (Sandbox Code Playgroud)
因为arr[0]等于2:
5: return 0 + 2;
Run Code Online (Sandbox Code Playgroud)
然后为什么sum([2, 3, 4], 1)返回2。
我不确定现在是否更清楚了,但我希望如此。:)
| 归档时间: |
|
| 查看次数: |
3611 次 |
| 最近记录: |