如何在递归函数中调用引用数组?
How do you call a reference array in a recursive function?
所以,我对引用和递归都缺乏知识。
请考虑以下事项:
int sumelements(int arraylength, int &list){
return list[arraylength] + sumelements(arraylength - 1, *list);
}
int main(){
int arraylength = 10;
int list[arraylength] = {1,2,3,4,5,6,7,8,9,10};
sumelements(arraylength-1, *list);
}
第 2 行会导致错误,假设是因为我的语法错误,尽管就像我说的那样,我对这两个概念都很陌生。
另外,我知道这是一个循环,我只是想编译它。
sumelements
正在访问list
的特定元素,因此您需要将list
参数从int&
更改为int*
(或list[]
,这与在函数参数中使用时int*
相同),以便operator[]
正常工作。 然后更改main
和sumelements
以在不使用operator*
的情况下传递list
。 当您仅通过名称引用固定长度数组时,它会衰减为指向第一个元素的指针,因此main
可以仅将数组作为list
本身传递。
此外,你有无休止的递归,因为你在sumelements
中没有停止条件,所以它只会无休止地调用自己,一旦arraylength
变得< 0
,就会导致未定义的行为。
此外,在main
中,您将使用在编译时未知的arraylength
值声明您的list
数组,该值仅在运行时未知。 C++标准不允许以这种方式声明固定长度的数组,但一些编译器(特别是 gcc)支持将其作为编译器扩展。 不要依赖此行为,因为它不可移植。 将arrayLength
声明为const
,以便在编译时知道它。
试试这个:
#include <iostream>
int sumelements(int index, int *list)
{
if (index < 0) return 0;
return list[index] + sumelements(index - 1, list);
}
int main()
{
const int arraylength = 10;
int list[arraylength] = {1,2,3,4,5,6,7,8,9,10};
std::cout << sumelements(arraylength - 1, list);
}
现场演示
话虽如此,处理此问题的更C++方法是使用标准std::accumulate()
算法而不是递归函数:
#include <iostream>
#include <numeric>
int main()
{
const int arraylength = 10;
int list[arraylength] = {1,2,3,4,5,6,7,8,9,10};
std::cout << std::accumulate(list, list+arraylength, 0);
}
现场演示
这只是在玩弄,可能有助于理解引用,但是,并不打算在实际代码中使用!!
如果做得对,也可以使用引用来完成:
int sumelements(int arraylength, int& list)
{
if(arraylength < 0) // stolen from Remy...
return 0;
return (&list)[arraylength] + sumelements(arraylength - 1, list);
// ^^^^^^^
}
好吧,由于list
仍然引用数组中的第一个整数,通过获取它的地址,您可以返回所需的指针 - 然后您可以将其与偏移量(索引)一起使用。在递归调用中,您按原样传递list
,然后再次传递相同。
如前所述:这只是为了理解,不要这样做,像 Remy 那样使用指针!
- 关于引用数组位置的问题
- 使用指针交换而不引用数组C++
- 对于Boost.Propertytree,有没有办法使用JSON点表示法来引用数组元素?
- 如何在递归函数中调用引用数组?
- 动态指针引用数组由三元运算符返回值,但有异常
- 为什么没有 std::string 构造函数来引用数组
- 指针/引用数组
- 错误 C2234:引用数组是非法的
- 引用数组的方法
- 通过引用数组值进行交换
- 引用数组涉及的技术问题
- 引用数组的函数调用
- 从其他类中的类引用数组
- 如何使用变量名称引用数组位置
- 在 OpenGL 中呈现三角形结构引用数组
- 如何取消引用数组元素(C++)
- c++引用数组数组(指针到指针?)
- 指向指针的指针如何能够引用数组
- C++取消引用数组
- c++中引用数组中对象的共享指针