Нужно написать арифметическую прогрессию с помощью рекурсии - PullRequest
0 голосов
/ 06 мая 2019

Мне нужно написать арифметическую прогрессию, используя рекурсию с первым значением (a1) = 2, разностью (d) = 3, и в C ++ будет вообще 15 членов (n). Я написал, но это не работает (

int progressionRec(int a1, int d, int n){
    if(n == 1){
        return a1;
    }
    else
        return a1+d*progressionRec(a1, d, n - 1);

}

Мне нужен вывод: 44 41 38 ... 2, но он дает мне: 14348906 ...

Ответы [ 2 ]

0 голосов
/ 06 мая 2019

Используя ваш оригинальный код, он должен читать

int progressionRec(int a1, int d, int n){
    if(n == 1){
        return a1;
}
    else
        return progressionRec(a1, d, n - 1) + d;
}

Возвращает одно значение, n-й элемент серии. Однако вы заявляете, что хотите получить результаты в обратном порядке [a1 + (n-1) d], [a1 + (n-2) d], ... a1. Это можно сделать, вызвав функцию из цикла с уменьшающимся индексом, используемым как 'n'. Как и в предыдущем ответе, вы хотите напечатать каждый термин из функции или чтобы он возвращал последовательные результаты повторных вызовов?

0 голосов
/ 06 мая 2019

вам нужно вывести несколько чисел, но вы можете вернуть только 1 целое значение из функции, поэтому просто напечатайте числа и не возвращайте их, если это вариант.

здесь:

void progressionRec(int a1, int d, int n) {
    if(n <= 1){
        printf("%d\n", a1);
        return;
    } else {
        int next = a1 + d;
        printf("%d\n", a1);
        progressionRec(next, d, n - 1);
    }
}

, если вы хотите, чтобы оно пошло вниз, как 44, 41, 38 .. просто передайте отрицательное значение параметру 'd'

например:

progressionRec(44, -3, 10);
...