【发布时间】:2020-05-03 16:15:15
【问题描述】:
这是问题
编写一个递归函数 sum(arr, n),它返回数组 arr 的前 n 个元素的和。
我在互联网上发现的尝试
function multiply(arr, n) {
if (n <= 0) {
return 1;
} else {
return multiply(arr, n - 1) + arr[n - 1];
}
}
我的问题
1. else 语句是如何工作的?
我无法理解我们要添加 arr[n - 1] 的内容。
2.有没有更简单的方法来编写这段代码?
【问题讨论】:
-
1.) 基本上这就是递归的工作原理。我们将 arr[n - 1] 添加到下一次调用 (n-2) 的结果中,依此类推,直到达到 index = 0。此递归从数组中的最大索引元素到最低索引元素进行。 2.)这已经是通过递归实现这一目标的一种非常简单的方法。如果要总结元素,则需要以某种形式使用此语句
return multiply(arr, n - 1) + arr[n - 1];(递归调用 + 当前调用)。 -
但我很确定代码不会返回正确的总和。因此,我将添加一个提供正确代码的答案。
-
这很有帮助,但是因为公式只返回 1,else 语句的第一部分如何提供任何有用的内容以添加到 arr[n-1]。例如。如果 arr 是:[1, 2, 3, 4] 并且 n 是 3,则返回 multiply(arr, n - 1) 在循环的前两个循环中代表什么
-
我更新了我的答案。请检查这是否现在回答了 n=3 和数组 [1,2,3,4] 的特定情况
标签: javascript algorithm recursion