我无法理解这个递归函数的代码。我是 DART 编程新手。我了解递归函数的作用,但我在理解编程语法时遇到问题。
int sum(List<int> numberList, int index) {
if (index < 0) {
return 0;
} else {
return numberList[index] + sum(numberList, index - 1);
}
}
main() {
// Driver Code
var result = sum([1, 2, 3, 4, 5], 4);
print(result);
}
问题:每个步骤的值存储在哪里 - 第 5 行第一遍的结果是否等于从第 11 行输入的 9。结果 9 的值存储在哪里?该函数如何知道在第二遍中添加 9 + 3?
递归函数是否具有每次传递生成的值的“内部存储器”?
我对编程语言的理解是 var result 将参数传递给 sum 函数。
sum 函数执行 if-else 命令,直到索引值为 0,即执行了 4 次。在第一遍中,返回命令创建值 9(5 + 4,因为索引的值为 5,索引 1 的值为 4)。
我的困惑由此开始。 sum 函数现在将执行第二次 if-else 传递并再次执行 return 命令。
现在 numberList[index] 的初始值需要为 9,sum(numberList, index - 1) 的值需要为需要为 3,才能得到 9 + 3 = 12。额外的 2 遍得到 12 + 2 = 14 和 14 + 1 = 15 的预期结果。
我的问题是“numberList[index]”中的索引值(如果确实如此)如何变化。索引值定义为4。这是递归函数的内部逻辑还是我完全误解了编程语法?我希望我们有一个“临时”变量来表示结果,该变量随着每次传递而增加。