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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
sire
25 / 25 / 2
Регистрация: 01.05.2011
Сообщений: 143
#1

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

24.02.2012, 02:48. Просмотров 1018. Ответов 18
Метки нет (Все метки)

Помогите с функцией пожалуйста, решать и выдавать код не надо, просто мягко говоря, пните в нужном направлении. Запутался совсем.

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

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

int sumPow( int maxPow )

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

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

возвращает

255
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2012, 02:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сумма произведений рекурсивно (C++):

Сумма элементов массива рекурсивно - C++
Опять все сначала:(((. Задача: соствить рекурсивную функцию, подсчета элементов одномерного массива, и затем в этой же функции заменить все...

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

сумма произведений списка - C++
Дан список из n целых неотрицательных чисел a1,a2,...an.Найти:a1*a2+a2*a3+...+a n-1*an. Только начали изучать С++ и не получается...

Сумма произведений элементов каждой строки массива - C++
Нужно найти сумму произведений элементов каждой строки массива. Помогите дописать, пожалуйста. #include <iostream> #include <ctime> ...

Рекурсивно обчислити добуток n ≥ 2 співмножників (n парне): у = (2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7).Рекурсивно обчислити добуток n ≥ 2 співмножників - C++
Рекурсивно обчислити добуток n ≥ 2 співмножників (n парне): у = (2/1)*(2/3)*(4/3)*(4/5)*(6/5)*(6/7)...

Вычислить y=x^N рекурсивно - C++
Вычислить y=x^N по следующему алгоритму: y=(x^(N/2))^2 , если N четное; y=x*x^(N-1) , если N нечетное. C ПОМОЩЬЮ РЕКУРСИИ. В чем ошибка? ...

18
samdavydov
60 / 21 / 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
0
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);

Как то так
0
Luke
39 / 39 / 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; в дебаге хорошо видно что происходит при вызове.
0
Байт
Эксперт C
16324 / 10600 / 1587
Регистрация: 24.12.2010
Сообщений: 20,207
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);
}
1
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);
}

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

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

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

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

C
1
return 2*f(n-1) + 1;
0
Байт
Эксперт C
16324 / 10600 / 1587
Регистрация: 24.12.2010
Сообщений: 20,207
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
1
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
0
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;
}
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
29.02.2012, 11:13 #12
sire, какой компилятор? Что именно не работает?
0
sire
25 / 25 / 2
Регистрация: 01.05.2011
Сообщений: 143
29.02.2012, 11:15  [ТС] #13
Цитата Сообщение от Nameless One Посмотреть сообщение
sire, какой компилятор? Что именно не работает?
codeBlock

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

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

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

C
1
2
   int upto, i;
    BORDER;
0
Миниатюры
Сумма произведений рекурсивно  
29.02.2012, 11:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.02.2012, 11:24
Привет! Вот еще темы с ответами:

Вычислить сумму рекурсивно - C++

Реализовать формулу рекурсивно - C++
Ребят срочно помогите. Задачу сдать нужно Вот так она работает и забивает массив. забивает по диагонали l - некоторый массив с...

По заданному X рекурсивно вычислить X^2 - C++
Написать программу, высчитывающую X^2. Х задается пользователем. Использовать рекурсию.

Задача о 8 ферзях рекурсивно - C++
нашел код, помогите сделать его рекурсивно а не поиском с возвратом позиций #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;time.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru