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

Сумма произведений рекурсивно - C++

Восстановить пароль Регистрация
 
sire
 Аватар для sire
25 / 25 / 2
Регистрация: 01.05.2011
Сообщений: 143
24.02.2012, 02:48     Сумма произведений рекурсивно #1
Помогите с функцией пожалуйста, решать и выдавать код не надо, просто мягко говоря, пните в нужном направлении. Запутался совсем.

ЗЫ только начал учить, не ругайтесь 'манами'

Нужнo написать рекурсивную функцию. имеем

int sumPow( int maxPow )

к примеру если sumPow( 7 ) то

2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 + 2^7

возвращает

255
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
samdavydov
59 / 20 / 2
Регистрация: 23.02.2012
Сообщений: 36
24.02.2012, 02:57     Сумма произведений рекурсивно #2
sumPow(7) = 2^7 + sumPow(6) = 2^7 + 2^6 + sumPow(5) = ... = твой ряд.

Рекурсия:
sumPow(n) = 2^n + sumPow(n-1)
sumPow(0) = 1
just_dude
11 / 11 / 2
Регистрация: 15.01.2012
Сообщений: 104
24.02.2012, 15:34     Сумма произведений рекурсивно #3
Цитата Сообщение от samdavydov Посмотреть сообщение
sumPow(7) = 2^7 + sumPow(6) = 2^7 + 2^6 + sumPow(5) = ... = твой ряд.

Рекурсия:
sumPow(n) = 2^n + sumPow(n-1)
sumPow(0) = 1
Их трудно осмыслить, но напиши функцию к примеру a*b, где b параметр и запихни в цикл какой нибудь
Посмотри как работает, что делает - так и разберешься

C++
1
2
3
4
5
6
7
8
int count(int b){
int a=1,c=0;
 c=a+b;
  c=count(b);
return c;
}
 
while (b<8;) count(b);

Как то так
Luke
37 / 37 / 1
Регистрация: 21.02.2012
Сообщений: 95
24.02.2012, 15:38     Сумма произведений рекурсивно #4
sire, основная суть рекурсивной функции - это
1. вызов из своего тела самой себя
2. обязательное условие при котором будет совершен выход из рекурсии.
есть разные виды рекурсий но эта наиболее проста для понимания

C++
1
2
3
4
5
6
7
int function (int a)
{
--a;
if (a ==0) return 1;//условие выхода
 
return function(a);//вызов самой себя с измененным параметром
}
это бессмысленная рекурсия она не делает ничего полезного. функция вызывает саму себя с параметром уменьшенным на 1. в том случае если при очередном вызове будет передан 0;
начнется выход из рекурсии и в итоге она вернет просто 1; в дебаге хорошо видно что происходит при вызове.
Байт
 Аватар для Байт
13988 / 8819 / 1230
Регистрация: 24.12.2010
Сообщений: 15,975
24.02.2012, 16:19     Сумма произведений рекурсивно #5
C
1
2
3
4
5
6
7
8
9
int f(int n)
{
  if (n<=0) return 1;
  return 2*f(n-1) + 1;
}
main()
{
   cout << f(7);
}
sire
 Аватар для sire
25 / 25 / 2
Регистрация: 01.05.2011
Сообщений: 143
24.02.2012, 16:30  [ТС]     Сумма произведений рекурсивно #6
Цитата Сообщение от Байт Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
int f(int n)
{
  if (n<=0) return 1;
  return 2*f(n-1) + 1;
}
main()
{
   cout << f(7);
}

спасибо конечно, хоть и на ++

ну раз уж решили хотя я просил этого не делать, то может будете любезны добавить /*коменты*/
Байт
 Аватар для Байт
13988 / 8819 / 1230
Регистрация: 24.12.2010
Сообщений: 15,975
24.02.2012, 18:45     Сумма произведений рекурсивно #7
Вот тебе чистый Си
C
1
printf("%d\n", f(7);
А по-поводу коментов... Даже и не знаю что тут комментировать? Разве что функцию main ?
sire
 Аватар для sire
25 / 25 / 2
Регистрация: 01.05.2011
Сообщений: 143
24.02.2012, 18:49  [ТС]     Сумма произведений рекурсивно #8
я же писла в начале нюб я

эту строчку на Си я дописал, хватило силенок :dance3:

Вот это прокомментируйте плиз

C
1
return 2*f(n-1) + 1;
Байт
 Аватар для Байт
13988 / 8819 / 1230
Регистрация: 24.12.2010
Сообщений: 15,975
24.02.2012, 19:09     Сумма произведений рекурсивно #9
f(0) = 1
f(1) = 2*1 + 1 = 3
f(2) = 2*3 + 1 = 7
f(3) = 2*7 + 1 = 15
f(4) = 2*15 + 1 = 31
f(5) = 2*31 + 1 = 63
f(6) = 2*63 + 1 = 127
f(7) = 2*127 + 1 = 255
sire
 Аватар для sire
25 / 25 / 2
Регистрация: 01.05.2011
Сообщений: 143
24.02.2012, 19:46  [ТС]     Сумма произведений рекурсивно #10
Ааа понял, моя ошибка. Нарушил заповедь:Ставьте правильные задачи и программист вам поможет.

Красивое решение. Вот только мне нужно, что бы степень была в решении, надо заюзать pow из math

2^0 ; 2^1 ; 2^2 ; 2^3 ; 2^4 ; 2^5 ; 2^6 ;2^7
sire
 Аватар для sire
25 / 25 / 2
Регистрация: 01.05.2011
Сообщений: 143
29.02.2012, 11:09  [ТС]     Сумма произведений рекурсивно #11
,я пониманию код страшный, но вот. Вопрос: почему это не работает в винде, под *никсом все хорошо

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
#define NL printf("\n")
#define BORDER printf("\n--------------------------\n")
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
 
int sumP2( int maxP )
{
    if (maxP==0)
        return 1;
    else
        return pow(2,maxP) + sumP2(maxP - 1);
}
main(int argc, char** argv)
{
    BORDER;
    int upto, i;
    if (argc < 2)
    {
        printf("Usage:\t%s <upto>\n", argv[0]);
        printf("e.g.: \t%s 8\n", argv[0]);
        BORDER;
        exit(1);
    }
    upto = atoi(argv[1]);
    for (i=0; i< upto; i++)
        printf("2^%d + ", i );
    printf("2^%d = %d\n", upto, sumP2(upto));
    BORDER;
    return 0;
}
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
29.02.2012, 11:13     Сумма произведений рекурсивно #12
sire, какой компилятор? Что именно не работает?
sire
 Аватар для sire
25 / 25 / 2
Регистрация: 01.05.2011
Сообщений: 143
29.02.2012, 11:15  [ТС]     Сумма произведений рекурсивно #13
Цитата Сообщение от Nameless One Посмотреть сообщение
sire, какой компилятор? Что именно не работает?
codeBlock

не выводит сумму всех 2ек в степенях.
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
29.02.2012, 11:19     Сумма произведений рекурсивно #14
sire, Code::Blocks — это не компилятор, а IDE. Я думаю, подразумевался MinGW.

Цитата Сообщение от sire Посмотреть сообщение
не выводит сумму всех 2ек в степенях.
я так понимаю, она хотя бы скомпилировалась. А подробней можно? Что он тогда выводит? Может, в этом проблема? Программа запускалась из консоли?

PS. По стандарту, который используется по умолчанию (C89), объявление переменных должно осуществляться в начале блока до любого другого исполняемого кода, а у тебя printf в 16 строке идет раньше объявления переменных
sire
 Аватар для sire
25 / 25 / 2
Регистрация: 01.05.2011
Сообщений: 143
29.02.2012, 11:24  [ТС]     Сумма произведений рекурсивно #15
Поменял местами, та же картина, компилит , чего-то делает. кодБлок сам держит окно открытым пока не скажешь.

C
1
2
   int upto, i;
    BORDER;
Миниатюры
Сумма произведений рекурсивно  
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
29.02.2012, 11:26     Сумма произведений рекурсивно #16
sire, ты не указал аргументы программе. Сделай это в настройках IDE, либо запускай программу вручную из консоли (не забыв указать аргумент)
sire
 Аватар для sire
25 / 25 / 2
Регистрация: 01.05.2011
Сообщений: 143
29.02.2012, 11:28  [ТС]     Сумма произведений рекурсивно #17
О_о

AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
29.02.2012, 11:36     Сумма произведений рекурсивно #18
А зачем тебе тут рекурсия? Динамика проще и понятнее.

C++
1
2
3
4
5
6
7
8
cin>>n;
int d[n+1],a[n+1];
d[0]=a[0]=1;
for(int i=1;i<=n;i++){
   d[i]=d[i-1]*2;
   a[i]=a[i-1]+d[i];
}
cout<<a[n];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.02.2012, 11:37     Сумма произведений рекурсивно
Еще ссылки по теме:

C++ Задать формулу рекурсивно
Сумма произведений C++
C++ Реализовать формулу рекурсивно

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

Или воспользуйтесь поиском по форуму:
sire
 Аватар для sire
25 / 25 / 2
Регистрация: 01.05.2011
Сообщений: 143
29.02.2012, 11:37  [ТС]     Сумма произведений рекурсивно #19
Цитата Сообщение от AncinetHero Посмотреть сообщение
А зачем тебе тут рекурсия? Динамика проще и понятнее.
хороший вопрос, на днях спрошу у лектора
Yandex
Объявления
29.02.2012, 11:37     Сумма произведений рекурсивно
Ответ Создать тему
Опции темы

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