Вычислить выражение рекурсивно и итеративно - C (СИ)
Формулировка задачи:
Решить задачу двумя способами - с рекурсией и без:
Решение задачи: «Вычислить выражение рекурсивно и итеративно»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
double func1(unsigned n) {
double val = 0.0;
for (; 0 < n; --n) {
val = sqrt((double)n + val);
}
return val;
}
double func2(unsigned a, unsigned n) {
if (n < a) {
return 0.0;
}
return sqrt(a + func2(a + 1, n));
}
int main() {
int n = 5;
printf("func1 = %lf\n", func1(n));
printf("func2 = %lf\n", func2(1, n));
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с числами с плавающей точкой и для ввода-вывода.
- Определение двух функций: func1 и func2.
- Функция func1 вычисляет значение рекурсивно, используя цикл for, который выполняется до тех пор, пока значение n больше нуля.
- Значение переменной val инициализируется как 0.0.
- Внутри цикла значение переменной val вычисляется как квадратный корень из (double)n + val.
- Функция func2 вычисляет значение итеративно, используя рекурсивный вызов внутри условия if.
- Если значение n меньше a, функция возвращает 0.0.
- В противном случае, функция возвращает квадратный корень из a + func2(a + 1, n).
- В функции main() определены две переменные: n и a.
- Значение переменной n равно 5.
- Вызов функции func1(n) и вывод результата в консоль.
- Вызов функции func2(1, n) и вывод результата в консоль.
- Возврат 0 из функции main(), что означает успешный конец работы программы.