Форум программистов, компьютерный форум CyberForum.ru

Рекурсивно вычислить сумму квадратов тех чисел, не превосходящих двух - C++

Восстановить пароль Регистрация
 
NimbJles
0 / 0 / 0
Регистрация: 09.06.2015
Сообщений: 14
03.07.2015, 17:42     Рекурсивно вычислить сумму квадратов тех чисел, не превосходящих двух #1
Пусть http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{0}={cos(1)}^{2}; {a}_{1}={-sin(1)}^{2}; {a}_{k}=2*{a}_{k-1}-{a}_{k-2}; k=2,3...
Найти сумму квадратов тех чисел http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{1}, ... , {a}_{100}, которые не превосходят двух, с помощью рекурсии.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "stdafx.h"
#include "conio.h"
#include "locale.h"
#include "stdlib.h"
#include "string"
 
double rekyrsia(int n)
{
    static int i = 0;
    static double sum = 0, a0, a1 = pow(-sin(1), 2);
    double a;
    if (i == 0)
    {
        a0 = pow(cos(1), 2);
        a1 = pow(-sin(1), 2);
        a = a1;
        sum = pow(a, 2);
    }
    //else return i;
    else
    {
        a = 2 * a1 - a0;
        if (a <= 2)
            sum = sum + pow(a, 2);
    }
    i++;
    if (i >= n)
    {
        a = 0, i = 0; return sum;
    }
    else return rekyrsia(n);
}
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    int n;
    printf("Введите n: ");
    scanf_s("%i", &n);
    printf("Сумма: %lg", rekyrsia(n));
    _getch();
    return 0;
}
Помогите исправить код, чтобы программа правильно вычисляла http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{k}.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2015, 17:42     Рекурсивно вычислить сумму квадратов тех чисел, не превосходящих двух
Посмотрите здесь:

Вычислить сумму квадратов всех целых чисел попадающих в интервал(lnx,e^x) x>1. C++
C++ Вычислить сумму квадратов первых 7 натуральных чисел
Число простых делителей не превосходящих х на С++ рекурсивно C++
найти сумму квадратов тех чисел а1,.,а100 C++
C++ Произведение двух чисел, не превосходящих 10^9
Дано 8 действительных чисел. Вычислить сумму квадратов разностей корней из модулей действительных чисел C++
Вычислить сумму квадратов чисел от 1 до введенного вами целого числа C++
C++ Вычислить сумму квадратов всех целых чисел, меньших заданного числа a

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
209 / 164 / 44
Регистрация: 17.05.2012
Сообщений: 611
Записей в блоге: 4
03.07.2015, 19:00     Рекурсивно вычислить сумму квадратов тех чисел, не превосходящих двух #2
C++
1
2
3
4
5
double rekyrsia(int k){
  if (k==0) return pow(cos(1), 2);
  if (k==1) return pow(-sin(1), 2);
  return 2*rekyrsia(k-1)-rekyrsia(k-2);
}
Krasiosoft
 Аватар для Krasiosoft
51 / 51 / 15
Регистрация: 01.06.2015
Сообщений: 189
03.07.2015, 21:28     Рекурсивно вычислить сумму квадратов тех чисел, не превосходящих двух #3
Цитата Сообщение от NimbJles Посмотреть сообщение
чтобы программа правильно вычисляла
Возможно, проблема в: pow(-sin(1), 2), скорее всего, нужно -pow(sin(1), 2)

Добавлено через 1 час 51 минуту
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
C++
1
2
3
4
5
double rekyrsia(int k){
  if (k==0) return pow(cos(1), 2);
  if (k==1) return pow(-sin(1), 2);
  return 2*rekyrsia(k-1)-rekyrsia(k-2);
}
Это не есть правильный подход для решения такой задачи.
При таком подходе, чтоб посчитать а20, нужно будет 21891 раз вызвать функцию rekyrsia, а21 - 35421 и а22 - 57313.

Правильнее будет что-то подобное:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
double rekyrsia( double a1, double a2, int k){
    if(k<=0){
        return 0;
    }
    double sum=rekyrsia(a2,2*a2-a1,k-1);
    if(a2<=2){
        sum+=pow(a2,2);
    }
    return sum;
}
 
// считает сумму квадратов, которые не превосходят двух, начиная от а1 и до ak включительно
double summ(int k){
    return rekyrsia( pow(cos(1), 2), -pow(sin(1), 2) , k );
}
 
int _tmain(int argc, _TCHAR* argv[]){
    printf("Result = %lf\n", summ(100) );
}
Тут вызовов rekyrsia будет k+1
Yandex
Объявления
03.07.2015, 21:28     Рекурсивно вычислить сумму квадратов тех чисел, не превосходящих двух
Ответ Создать тему
Опции темы

Текущее время: 08:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru