Подскажите где ошибка (рекурсивная функция) - C (СИ)
Формулировка задачи:
Не работают последних два условия.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int fun(int a);
int main()
{
int x;
printf("Enter x: ");
scanf("%d", &x);
printf("%d\n", fun(x));
return 0;
}
int fun(int a)
{
int f;
unsigned int k = 5;
if (a == 4 * k + 3)
f = 9;
else if (a < 7)
f = pow(fun(abs(a - 1) - 2), 2);
else if (a != 4 * k + 3)
f = log(a - 2) / fun(a - 1);
return f;
}Решение задачи: «Подскажите где ошибка (рекурсивная функция)»
textual
Листинг программы
int fun(int a)
{
int f;
if (a == 23) f = 9;
else
if (a < 7) f = pow(fun(abs(a - 1) - 2), 2);
else
f = log(a - 2) / fun(a - 1);
return f;
}
Объяснение кода листинга программы
- Объявлена рекурсивная функция
fun(int a). - В функции объявлена переменная
fтипаint. - Если
aравно 23, тоfприсваивается 9. - Иначе, если
aменьше 7, тоfвычисляется как результат вызова функцииfunс аргументомabs(a - 1) - 2, возведенным в квадрат. - Иначе, если
aбольше или равно 7, тоfвычисляется как результат вызова функцииfunс аргументомa - 1, деленный на логарифм (log) от(a - 2). - Функция возвращает значение
f. - Функция вызывается с аргументом 7.
- Процесс повторяется с шага 4 до тех пор, пока не будет достигнуто базовое условие (если
aравно 23). - Значение 9 присваивается переменной
f. - Функция возвращает значение 9.
- Значение 9 возвращается в качестве результата выполнения функции.