Рекурсивная функция для вычисления выражения - исправить код - C (СИ)

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

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

Условия задачи: Пусть x1=x2=x3=1; xi=xi-1+xi-3, i=4,5... Никак не получается сделать рекурсию, сделал только решение этой задачи через цикл для дальнейщей проверки рекурсии:
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;
}
В наработках по рекурсии только часть кода, которая вычисляет значение xi:
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);
}

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

  1. Объявлена функция xn_rec, которая принимает два аргумента: pn и i. Первый аргумент - это указатель на массив, второй - индекс текущего элемента массива.
  2. В функции main объявлен массив A типа int с размером N.
  3. Вызывается функция xn_rec с аргументами A и 0, где 0 - это индекс первого элемента массива.
  4. В функции xn_rec происходит проверка: если i больше или равно N, то функция возвращает управление.
  5. Если условие в предыдущем пункте не выполняется, то происходит присваивание значения элементу массива pn[i]. Значение определяется следующим образом: если i больше 2, то это сумма значений элементов pn[i-1] и pn[i-3]. В противном случае значение равно 1.
  6. После этого вызывается рекурсивно функция xn_rec с аргументами pn и ++i.
  7. В функции main происходит вывод на экран всех элементов массива A через пробел.
  8. В конце функции main возвращается 0, что означает успешное завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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