Заменить цикл на рекурсию - C (СИ) (70175)

Узнай цену своей работы

Формулировка задачи:

a0=1, ak=k*ak-1+1/k, k=1,2,... . Дано n. Получить an.
int cycle (int n){
    double a0=1;
for (int i,k = 1; i<=n; k++, i++) {
    a0 = k*a0+1/k;
}
    return a0;
}

Решение задачи: «Заменить цикл на рекурсию»

textual
Листинг программы
double tr (int n, int k, double a) { return n ? tr(n-1, k+1, a*k+1./k) : a; }

Объяснение кода листинга программы

В данном коде представлена функция с именем tr, которая принимает три аргумента: n, k и a.

  1. n - это переменная типа int, которая представляет собой некоторое значение, которое будет использоваться в цикле или рекурсии.
  2. k - это переменная типа int, которая также используется в цикле или рекурсии.
  3. a - это переменная типа double, которая представляет собой некоторое начальное значение, которое будет использоваться в цикле или рекурсии. Функция tr использует рекурсию для вычисления некоторого значения. Рекурсия - это процесс, когда функция вызывает сама себя. В данном случае, функция tr вызывает саму себя с новыми значениями аргументов, пока не будет достигнуто базовое условие, которое останавливает рекурсию. Базовое условие в данном коде представлено оператором ?. Если значение переменной n равно нулю, то рекурсия останавливается и функция возвращает значение переменной a. Если значение переменной n не равно нулю, то рекурсия продолжается, и функция вызывает саму себя с новыми значениями аргументов. В общем виде, процесс вычисления в данной функции можно описать следующим образом:
    • Если n равно нулю, вернуть a.
    • Если n не равно нулю, вызвать tr с аргументами n-1, k+1 и a*k+1./k. Таким образом, функция tr рекурсивно вычисляет некоторое значение, пока не достигнет базового условия, после чего возвращает это значение.

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы