Рекурсивная функция для вычисления выражения - исправить код - C (СИ)
Формулировка задачи:
Условия задачи:
Пусть x1=x2=x3=1; xi=xi-1+xi-3, i=4,5...
Никак не получается сделать рекурсию, сделал только решение этой задачи через цикл для дальнейщей проверки рекурсии:
В наработках по рекурсии только часть кода, которая вычисляет значение xi:
Выполнить эту задачу нужно в одной функции.
И ещё: преподаватель говорит, что рекурсия должна вызываться только один раз, а как это сделать я не знаю. Ведь в том и смысл рекурсии, что она вызывает сама себя несколько раз, или я что-то не понял
double funkcia(int n) { int i; double *x; float tmp, sum=0; x=(double *)calloc(n, sizeof(double)); x[0]=x[1]=x[2]=1; for(i=3; i<n; i++) { x[i]=x[i-1]+x[i-3]; } for (i=0; i<n; i++) { tmp = x[i] / pow(2.0, i+1); sum += tmp; } return sum; }
int xn_rec(int n) { static int x[99] = {1,1,1}; static int next_i = 3; int i = n - 1; if(i >= next_i) { x[i] = xn_rec(n - 1) + xn_rec(n - 3); next_i = n; } return x[i]; }
Решение задачи: «Рекурсивная функция для вычисления выражения - исправить код»
textual
Листинг программы
#define N 20 void xn_rec(int* pn, int i); int main() { int A[N]; xn_rec(A, 0); for (int i = 0; i < N; i++) printf("%d ",A[i]); printf("\n"); return 0; } void xn_rec(int* pn, int i) { if (i >= N) return; pn[i] = (i > 2) ? pn[i-1] + pn[i-3] : 1; xn_rec(pn, ++i); }
Объяснение кода листинга программы
- Объявлена функция
xn_rec
, которая принимает два аргумента:pn
иi
. Первый аргумент - это указатель на массив, второй - индекс текущего элемента массива. - В функции
main
объявлен массивA
типаint
с размеромN
. - Вызывается функция
xn_rec
с аргументамиA
и0
, где0
- это индекс первого элемента массива. - В функции
xn_rec
происходит проверка: еслиi
больше или равноN
, то функция возвращает управление. - Если условие в предыдущем пункте не выполняется, то происходит присваивание значения элементу массива
pn[i]
. Значение определяется следующим образом: еслиi
больше2
, то это сумма значений элементовpn[i-1]
иpn[i-3]
. В противном случае значение равно1
. - После этого вызывается рекурсивно функция
xn_rec
с аргументамиpn
и++i
. - В функции
main
происходит вывод на экран всех элементов массиваA
через пробел. - В конце функции
main
возвращается0
, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д