От новичка до гуру: Курсы программирования на CyberDuff

Как рекурсивно суммировать определенное количество чисел в массиве

У меня есть программа, в которой она запрашивает размер массива, который хочет пользователь, и вставляет числа в массив, начиная с 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;

}
17.02.2015

Ответы:


1

1)int A[number] имеет индексы от 0 до number-1.

Поскольку вы получаете доступ от 1 к number, объявите его как

int A[number+1]

2) Измените базовое условие в рекурсии как

if(n==0)

потому что в вашем коде вы также добавляете значение в A[0]

17.02.2015

2
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).

17.02.2015

3

В вашем коде есть одна серьезная проблема. «Внешний доступ»

Вы определили свой массив как

int A[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.

17.02.2015
Новые материалы

ИИ меняет этику в руководстве
Связь искусственного интеллекта, лидерства и этики Сострадание, глубокое понимание чужих страданий в сочетании с желанием облегчить их, возвышается как неотъемлемая человеческая добродетель...

Представляем Narwhal Technologies (Nrwl)
6 декабря 2016 г. Маунтин-Вью, Калифорния С тех пор, как Виктор Савкин и я (Джефф Кросс) присоединились к команде Angular в Google на заре Angular 1, Angular продемонстрировал феноменальный..

Путь AWS  — «Изучение машинного обучения — 10 начинающих ИИ и машинного обучения на AWS».
Универсальный ресурсный центр для изучения искусственного интеллекта и машинного обучения. НОЛЬ или ГЕРОЙ, начните свое путешествие здесь. Получите решения и пройдите обучение у экспертов AWS...

5 простых концепций Python, ставших сложными
#заранее извините 1) Переменные x = 4 y = 5 Переменная в Python — это символическое представление объекта. После присвоения некоторого объекта переменной Python мы приобретаем..

«Освоение вероятности: изучение совместной, предельной, условной вероятности и теоремы Байеса —…
Виды вероятности: Совместная вероятность Предельная вероятность Условная вероятность Диаграмма Венна в вероятностях: В “Set Theory” мы создаем диаграмму Венна...

Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

Отслеживание состояния с течением времени с дифференцированием снимков
Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..