我有一个程序,它询问用户想要的数组的大小以及插入数字到数组中的状态为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;
}
答案 0 :(得分:1)
1)int A[number]
有0
到number-1
的差异。
由于您从1
访问number
,因此将其声明为
int A[number+1]
2)以递归方式更改基本条件
if(n==0)
在您的代码中,您还会在A[0]
答案 1 :(得分: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)
。
答案 2 :(得分:0)
您的代码存在一个主要问题。 &#34;超出界限&#34;
您已将阵列定义为
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。