如何递归地求出数组中一定数量的数字

How to recursivley sum up a certain amount of numbers in array

本文关键字:数字 数组 何递归 递归      更新时间:2023-10-16

我有一个程序,它询问用户想要的数组的大小,并在数组中插入以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]具有从0number-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开始。