如何递归地求出数组中一定数量的数字
How to recursivley sum up a certain amount of numbers in array
我有一个程序,它询问用户想要的数组的大小,并在数组中插入以1开头并以数组编号结尾的数字。然后,它会要求用户在数组编号之间输入另一个编号,并将所有编号1递归地相加为该编号。
我想要得到什么
请输入一个数字:7您选择的阵列大小为7
1
2
3
4
5
6
7
请在数组中输入一个数字,从1:4 求和
数字1到4之和是10
我得到的
数字1到4之和是17
出于某种原因,它给了我17个而不是10个,请帮帮我。
#include <iostream>
using namespace std;
#include <assert.h>
int compute(const int A[], int n)
{
if (n< 0)
{
return 0;
}
else
{
return A[n] + compute(A, n-1);
}
}
int main()
{
int number;
cout << "Please enter a number of a size that "<<
"you want your array that is between 1 and 100: ";
cin >> number;
int A[number];//size of array
assert(number >= 0 && "Error: Number cannot be less than 0.");
assert(number <= 100 && "Error: Number cannot be greater than 100.");
int input;// the numbers put into the array
cout<< "The array size that you have chosen is "<< number<<endl;
for(int i = 1; i < number+1; i++)
{
A[i] = i;
cout <<A[i]<< endl;
}
int sum;
cout<< "Please choose a number to sum up: ";
cin >> sum;
cout<<"The sum of the numbers 1 to " << sum << " is " <<compute(A, sum)<<endl;
}
1)int A[number]
具有从0
到number-1
的索引。
由于您从1
访问number
,因此将其声明为
int A[number+1]
2) 将递归中的基本条件更改为
if(n==0)
beacause在您的代码中,您还添加了A[0]
的值
int number;
cin >> number;
int A[number];//size of array
对于这些行,有效的数组索引是[0, number)
,而不是[0, number]
。因此,您可能希望将A
声明为number+1
元素数组。将其更改为
int *A = new int[number+1];
此外,由于从未分配给A[0]
,因此compute()
的终止条件应更改为if (n <= 0)
。
您的代码有一个主要问题。"越界访问"
您已将阵列定义为
int A[number];
当number=3时,您有数组元素A[0]、A[1]和A[2]。
写入的循环为:
for(int i = 1; i < number+1; i++)
{
A[i] = i;
cout <<A[i]<< endl;
}
在这个循环中,您试图访问A[3],它是越界访问。
请更正。您必须了解数组索引从0开始,而不是从1开始。
相关文章:
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 数组/c++中的大量数字
- 遍历并行数组以确定C++中的最大数字
- 整数区间(或 int 数组)中每个数字的出现次数
- 如何在 C++ 中将文件中的逗号分隔数字读取到数组中?
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 获取 2D 数组 c++ 中的所有数字对
- 为什么使用数组元素查找最大数字的程序不起作用?
- 如何从向量或数组中选择最常见的数字?(前五名)C++
- 如何从保存在 Java 中C++的字节数组中读取数字?
- 以十为基数的数字到布尔数组,该数组要求二进制/基数为 2 的数字
- C++ 检查结果数组中有多少次数字
- 如何在不使用 C++ 中的数组或函数的情况下查找 N 位数字的所有排列
- 如何在C++中有效地将数字值重新分配给字符数组
- 查找数组中的最小数字
- 查找数组中重复(重复)数字的索引
- 我必须找到给定数组中所有数字的周期,就像有很多解决方案,但数组的大小是 10^5
- 类、数字/数组或对象中的对象