如何以递归方式总结数组中的一定数量的数字

时间:2015-02-17 04:18:09

标签: c++ arrays recursion

我有一个程序,它询问用户想要的数组的大小以及插入数字到数组中的状态为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;

}

3 个答案:

答案 0 :(得分:1)

1)int A[number]0number-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。