profile
Опубликовано 6 лет назад по предмету Информатика от laaa23

разработать рекурсивную функцию, не возвращающую значений:
даны первый член и разность арифметической прогрессии. Написать рекурсивную функцию для нахождения n-го члена и суммы n первых членов прогрессии. Сделать в C++ подробно и с пояснениями, пожалуйста

  1. Ответ
    Ответ дан ShredingerCat
    #include <iostream>

    using namespace std;

    void arithmeticProgression(const int& first, const int& differense, const int& N){
        // first - первый номер арифметической прогрессии
        // difference - разность
        // N - число, до которого продолжать прогрессию

        static int sum = 0; // тут будет сумма
        static int callsNumber = 0; // считаем число вызовов функции для определения номера элемента последовательности
        int next = first + differense; // следующий элемент прогрессии
        sum += first; // подсчет суммы

        if(callsNumber == N){
            cout << "finally item: " << first << endl;
            cout << "sum: " << sum << endl;
            sum = 0;
            callsNumber = 0;
            return; // если следующий элемент идет по порядку больше N, то прервать рекурсию
        }
        else{
            callsNumber++;
            arithmeticProgression(next, differense, N); // иначе делать тоже самое со следующим числом прогрессии
        }
    }

    int main(){
        arithmeticProgression(2, 3, 3); // пример вызова
        return 0;
    }

    1. Ответ
      Ответ дан ShredingerCat
      Главная фича - использовать статическую переменную для подсчета суммы, так как она сохраняет свое значение между вызовами функции. Минус в этом - функцию можно вызвать только один раз.
    2. Ответ
      Ответ дан ShredingerCat
      Если захочешь больше раза вызывать, то обнуляй сумму перед выходом из рекурсии (т.е. перед return)
    3. Ответ
      Ответ дан ShredingerCat
      изменил ответ, т.к. обратил внимание на требование суммы по N-ому члену прогрессии, а не до числа N
Самые новые вопросы