c++ - 如何在递归函数中调用引用数组?

标签 c++ recursion syntax reference

因此,我缺乏引用和递归方面的知识。

考虑以下几点:

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[]将正常工作。然后同时更改 mainsumelements通过list不使用operator*根本。当您仅通过其名称引用固定长度数组时,它会衰减为指向第一个元素的指针,因此 main可以将数组作为 list 传递自己。

另外,你有无穷无尽的递归,因为你在 sumelements 中没有停止条件。 ,所以它会不断地调用自己,导致未定义的行为一次arraylength变成 < 0 .

另外,在 main ,您正在声明您的 list使用 arraylength 的数组在编译时不知道的值,仅在运行时知道。 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);
}

Live Demo

话虽这么说,一个更像 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);
}

Live Demo

关于c++ - 如何在递归函数中调用引用数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49439307/

相关文章:

python - Python : Variable name is 'syntax error'

没有参数标签的 Swift 函数

c++ - 为什么 complex<double> * int 没有在 C++ 中定义?

c++ - 如何识别分隔符以及如何将其与路径一起使用 Open Inventor

c++ - stm32f4vg407的eCos配置工具

python - Python 中输入数字列表的排列

git - 它的命令中的 git 点符号是更通用的东西的一部分吗?

c++ - 在 Objective-C 项目中使用 C++ 代码

c - 我创建了一个整数数组,系统提示用户选择 2 个数字,我试图从这 2 个数字返回斐波那契序列

javascript - 如何在分形绘图递归函数中创建延迟