Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2020, 17:10   #1
Artemii21
Пользователь
 
Регистрация: 04.04.2020
Сообщений: 26
Восклицание Си, рекурсия, нахождение суммы

Здравствуйте! Мне необходимо при помощи рекурсии вычислить сумму элементов по формуле, при чем первые три элемента равны 1. Я написал программу нахождения каждого элемента, а вот не знаю, как при помощи рекурсии вычислить сумму, каким образом разместить ее. Знаю, что для этого мне необходимо проверить, чтобы количество элементов не было отрицательным (в этом случае для суммы будет 0), а в противном должна вычисляться сумма. Если бы это была итерация, я бы просто написал sum+=(a[i]/pow(2,i)). Помогите пожалуйста преобразовать эту формулу для рекурсии. Я хуже чайника в си, буду благодарен!

Код:
#include<stdio.h>
#include<math.h>
 
int element(int i, int n, int a[]) {
  a[0] = 1;
  a[1] = 1;
  a[2] = 1;
  if (i <= n - 1) {
    a[i] = a[i - 1] + a[i - 2];
    printf("%5i", a[i]);
    element(i + 1, n, a);
  }
}
output(int i, int n, int a[]) {
  if (i < n) printf("%5i", a[i]), output(i + 1, n, a);
}
sum(int a[], int n) {
  return (n == -1) ? 0 :
}
main() {
  int a[10], i, n;
  element(3, 6, a);
  puts(" ");
  output(0, 6, a);
  printf("\n%i", sum(a, 6));
  puts(" ");
}
Artemii21 вне форума Ответить с цитированием
Старый 27.04.2020, 18:51   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,317
По умолчанию

Код:
return (n == -1) ? 0 : a[n] + sum(a, n - 1);
Не забудьте в вызове заменить 6 на 5.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 27.04.2020, 18:56   #3
Artemii21
Пользователь
 
Регистрация: 04.04.2020
Сообщений: 26
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Код:
return (n == -1) ? 0 : a[n] + sum(a, n - 1);
Не забудьте в вызове заменить 6 на 5.
о, это обычная сумма, а если сумма по формуле? x[i]/i^2? а если точнее sum+=(a[i]/pow(2,i)) p.s. эта формула при итерации так выглядит
Artemii21 вне форума Ответить с цитированием
Старый 27.04.2020, 19:04   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,317
По умолчанию

Ну просто добавить деление.
Код:
double sum(int a[], int n) {
  return (n == -1) ? 0 : a[n] / pow(2, n) + sum(a, n - 1);
}

printf("\n%f", sum(a, 5));
Только pow(2, n) это 2^n. Если нужно n^2, то не забудьте решить проблему с нулевым элементом.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 27.04.2020 в 19:06.
BDA вне форума Ответить с цитированием
Старый 27.04.2020, 19:25   #5
Artemii21
Пользователь
 
Регистрация: 04.04.2020
Сообщений: 26
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Только pow(2, n) это 2^n. Если нужно n^2, то не забудьте решить проблему с нулевым элементом.
Должно быть 2^n, но в результате в ответе дает значение 0.000000
Artemii21 вне форума Ответить с цитированием
Старый 27.04.2020, 19:51   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,317
По умолчанию

Покажите код целиком. У меня выдает 2.343750.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 27.04.2020, 19:58   #7
Artemii21
Пользователь
 
Регистрация: 04.04.2020
Сообщений: 26
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Покажите код целиком. У меня выдает 2.343750.
Код:
#include<stdio.h>
#include<math.h>

int element(int i, int n, int a[])
{
    a[0]=1; a[1]=1; a[2]=1;
    if (i<=n-1) { a[i]=a[i-1]+a[i-2]; printf("%5i",a[i]);
    element(i+1,n,a);
    }
}
output(int i, int n, int a[]) { if (i<n) printf("%5i",a[i]), output(i+1,n,a);}
sum(int a[], int n)
{
    return (n==-1)?0:((a[n] / pow(2, n)) + sum(a, n - 1));
}
 main()
 {
     int a[10],i,n;
     element(3,6,a); puts(" ");
    output(0,6,a);
    printf("\n%f",sum(a,5)); puts(" ");
 }
Возможно не доглядел что-то?
Artemii21 вне форума Ответить с цитированием
Старый 27.04.2020, 20:07   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,317
По умолчанию

Укажите тип возвращаемого значения функции sum как double.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 27.04.2020, 20:33   #9
Artemii21
Пользователь
 
Регистрация: 04.04.2020
Сообщений: 26
По умолчанию

BDA, спасибо большое!
Artemii21 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нахождение суммы ряда. Рекурсия. С++ Rezcik Помощь студентам 5 07.06.2017 14:08
Рекурсия для вычисления суммы ряда malikon Помощь студентам 3 02.05.2014 20:46
Нахождение суммы Ania Lunee Помощь студентам 2 18.05.2012 22:41
Нахождение суммы Ania Lunee Помощь студентам 2 17.05.2012 23:41
рекурсия для расчета суммы mego4el Помощь студентам 2 13.02.2011 10:02