【发布时间】:2016-07-15 21:01:04
【问题描述】:
考虑:
int sum(const int numbers[], const int size){
if (size == 0)
return 0;
else
return numbers[0] + sum(numbers+1, size-1);
}
这是一个来自 MIT 6.096 的简单递归函数,用于添加任意数量的整数,并且有效。
我看不懂的是最后一行:
numbers+1 是如何工作的,因为 numbers[] 是一个 int 数组,并且您不应该将整数添加到 int[] 常量?
【问题讨论】:
-
这是 C 代码。使用递归函数来计算数组的总和确实是他们可能选择的最糟糕的例子。谁写这样的例子?递归函数最好用在必然递归的算法上。
-
这里,
const int numbers[]与const int* numbers相同:指向常量值的非常量指针 -
@tadman 出于某种原因,在某些编译器上,如果它们发现尾递归,它们会生成比循环更快的代码。但是,我同意这并不容易阅读。
-
@TomTanner 我真的很想看到一些基准,因为这对我来说听起来像是一个都市传奇。
-
@TomTanner 这并不重要,因为这个例子不是尾递归的。
标签: c++ arrays recursion arguments arrayaccess