Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Lena86
0 / 0 / 1
Регистрация: 22.08.2014
Сообщений: 81
#1

Рекурсия: найти произведение чисел от A до B - C++

11.09.2014, 19:10. Просмотров 1322. Ответов 15
Метки нет (Все метки)

Как можно эту задачку решить с помощью рекурсии? я вот только циклом смогла
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
#include <iostream>
#include <time.h>
#include <stdlib.h>
 
using namespace std;
 
double a;
double b;
 
void result(double n,double m)
{
double res=1;
for(double i=n;i<m+1;i++)
{
    
    res*=i;
    
}
cout<<res<<"\n";
}
void main()
{    
    
   
//найти произведение чисел от "а" до "б"( "а" и "б" - глобальные)
 
    cout<<"Enter digit (a)\n";
    cin>>a;
    cout<<"Enter digit (b)\n";
    cin>>b;
    result(a,b);
   
}

http://www.cyberforum.ru/cpp-beginners/thread1313944.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2014, 19:10
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Рекурсия: найти произведение чисел от A до B (C++):

Рекурсия. Найти сумму чисел от 1 до n
Добрый день, изучаю рекурсию, захотел написать программу, считающую сумму чисел...

Рекурсия: найти разность суммы нечетных целых чисел от 2 до 22, и суммы четных чисел от 5 до 17
Вычислить S1-S2, где S1 – сумма нечетных целых чисел от 2 до 22, S2 – сумма...

Найти произведение всех положительных чисел массива, и количество отрицательных чисел
Помогите, пожалуйста, с заданием по с++. Найти произведение всех положительных...

Записать в текстовый файл К целых чисел. Найти произведение наибольшего и наименьшего из чисел
Записать в текстовый файл К целых чисел. Найти произведение наибольшего и...

Рекурсия: найти наибольший общий делитель 2-х натуральных чисел
С помощью рекурсивной функции найти наибольший общий делитель 2-х натуральных...

15
contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 608
11.09.2014, 20:49 #2

Не по теме:

Глобальные переменные-то зачем? Хотя мне как-то...



C++
1
2
3
4
5
6
double mulRange(double a, double b) {
    if(a < b) {
        return a*mulRange(a + 1, b);
    }
    return a;
}
Хотя циклом правильнее
1
_Ivana
11.09.2014, 20:52
  #3

Не по теме:

Цитата Сообщение от contedevel Посмотреть сообщение
Хотя циклом правильнее
Одна бабка говорит, что если рекурсия хвостовая, то компилятор сам ее в цикл развернет. А рекурсию в любом случае осваивать надо, а то можно как я попасть в такие края, где циклов не бывает - только рекурсией и спасаешься

0
GetHelp
60 / 61 / 11
Регистрация: 27.02.2013
Сообщений: 1,112
11.09.2014, 20:56 #4
или если уж совсем коротко (код contedevel просто чуть изменил)
C++
1
2
3
4
double mul(double a, double b)
{
    return (a < b) ? a * mul(a + 1, b) : a;
}
Цитата Сообщение от contedevel Посмотреть сообщение
Хотя циклом правильнее
это почему же? рекурсия наоборот в программирование самая полезная и правильная вещь имхо так сказать высший пилотаж...
0
contedevel
57 / 55 / 13
Регистрация: 07.10.2012
Сообщений: 608
11.09.2014, 20:59 #5
Цитата Сообщение от _Ivana Посмотреть сообщение
Одна бабка говорит, что если рекурсия хвостовая, то компилятор сам ее в цикл развернет. А рекурсию в любом случае осваивать надо, а то можно как я попасть в такие края, где циклов не бывает - только рекурсией и спасаешься
Зависит от компилятора.
А по поводу типа задач на рекурсию, то не уверен, что все... Но пока не попадались задачи, которые бы не получилось из рекурсивных в итеративные переделать.
Конечно, итеративные иногда получаются медленнее или сложнее код, но нет опаски переполнения стека вызовов.
Просто рекурсию, стоит использовать, только когда есть точная уверенность, что количество вызовов будет "небольшим" и итеративный аналог невозможен или хуже

Цитата Сообщение от GetHelp Посмотреть сообщение
или если уж совсем коротко (код contedevel просто чуть изменил)

Не по теме:

Зачем девушку тернарным оператором пугаешь?

0
_Ivana
11.09.2014, 21:05
  #6

Не по теме:

Цитата Сообщение от contedevel Посмотреть сообщение
Но пока не попадались задачи, которые бы не получилось из рекурсивных в итеративные переделать
Та же бабка говорит, что некто Стефан Клини в свое время сформулировал и доказал теорему о том, что любой рекурсивный алгоритм можно реализовать итеративно. Правда, насчет сложнее код, это нередко так и есть, а насчет медленнее - как реализовать, сохранение/восстановление контекста в стеке тоже много времени/памяти занимает.

0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,211
11.09.2014, 21:07 #7
Цитата Сообщение от GetHelp Посмотреть сообщение
это почему же? рекурсия наоборот в программирование самая полезная и правильная вещь имхо
это смотря где и смотря куда
например факториал, самое любимое у преподов, кстати задача попадает под факториал
определение
факториал есть произведение числа на факториал меньшего числа- рекурсия
факториал есть произведение от единицы до числа- цикл
теперь решения отталкиваясь от факториала
рекурсия
C++
1
2
3
4
5
6
7
int fnc(int a, int b)
{
  if (b<=a)
    return a;
 
return b*fnc(a,b-1);
 }
цикл
C++
1
2
3
4
5
6
7
int fnc( int a, int b)
{
 int p=a; 
  for(int i=a+1;i<=b;i++)
   p*=i;
return p;
}
Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
Та же бабка говорит, что некто Стефан Клини в свое время сформулировал и доказал теорему о том, что любой рекурсивный алгоритм можно реализовать итеративно.
попроси эту бабку реализовать заливку области или например обход бинарного дерева
чтобы было просто и понятно

0
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
11.09.2014, 21:13 #8
Да простят меня модераторы - дам здесь эту занятную ссылку по теме факториала и рекурсии без циклов, вчера обнаружил http://www.willamette.edu/~fruehr/haskell/evolution.html

Добавлено через 3 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
попроси эту бабку реализовать заливку области
ну для заливки области итеративно и к бабке ходить не надо и Клини с Кнутом вызывать, вот реализовал на коленке наскоро: http://www.cyberforum.ru/cpp-beginne...ml#post6581138 Хотя вы скорее всего скажете, что имели в виду другое?
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,211
11.09.2014, 21:28 #9
Цитата Сообщение от _Ivana Посмотреть сообщение
дам здесь эту занятную ссылку по теме факториала и рекурсии без циклов,
гениально
первая же строчка
fac n = if n == 0
then 1
else n * fac (n-1)
это не рекурсия?
Цитата Сообщение от _Ivana Посмотреть сообщение
ну для заливки области итеративно и к бабке ходить не надо и Клини с Кнутом вызывать, вот реализовал на коленке наскоро: Попадание точки в фигуру на плоскости
ты ничего с трамвайной ручкой не путаешь
Попадание точки в фигуру на плоскости и Заливка области это несколько разные вещи
Ты словами опиши алгоритм
и чтобы он был проще и понятней рекурсии
нет я конечно реализовывал это на асссемблере, который не поддерживает рекурсию, во времена Спектрумов
но спасибо больше не надо
еще один пример более мне близок последнее время БПФ( быстрое преобразование Фурье)
0
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
11.09.2014, 21:33 #10
По-моему это вы путаете все с трамвайной ручкой, причем оба раза:
Цитата Сообщение от ValeryS Посмотреть сообщение
гениально
первая же строчка
это не рекурсия?
А кто говорит что не рекурсия? Наоборот, это как раз примеры именно рекурсии. Там вообще циклы язык не позволяет писать
Про попадание чего-то куда-то это только тема так зовется. там уже к заливке перешли на тот момент. А словесное описание алгоритма постом ниже: http://www.cyberforum.ru/cpp-beginne...ml#post6581145
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,211
11.09.2014, 21:47 #11

Не по теме:

_Ivana, все, прошу пардона
просто эту фразу

Цитата Сообщение от _Ivana Посмотреть сообщение
по теме факториала и рекурсии без циклов,
прочитал как
факториала без рекурсии и без циклов
вот и ответил
насчет всего остального, рекурсия или цикл
предлагаю или открыть новую тему(может модераторы помогут) или в личку
вопрос известный возможна ли замена рекурсии циклом



Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от _Ivana Посмотреть сообщение
А словесное описание алгоритма постом ниже:
Rookie Hose, если вы внимательно всмотритесь в мой алгоритм, то увидите, что он тривиален и дубов - я просто беру цвет заданного стартового пикселя (ловлю его координаты по щелчку мыши) и делаю такое "растекающееся пятно", проверяя цвет соседних пикселей - пока он совпадает с цветом стартового пикселя
так этот алгоритм рекурсией реализуется на раз-два
а циклами очень сильно постараться надо

0
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
11.09.2014, 21:49 #12

Не по теме:

ValeryS, согласен и на новую тему и на личку, если это больше никому не интересно. А еще хотел бы выяснить, почему -=Юра=- забраковал мой алгоритм заливки - его я постеснялся спрашивать, он так уверенно сказал что съел на этом собаку и у меня навскидку ничего лучше его наработок не получится...



Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
так этот алгоритм рекурсией реализуется на раз-два
а циклами очень сильно постараться надо
Там выше есть код на цикле - мне он гораздо проще и понятнее рекурсии, десять строчек всего - как раз на раз-два, никаких "сильных стараний", все просто как палка-веревка

0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
11.09.2014, 21:50 #13
Цитата Сообщение от _Ivana Посмотреть сообщение
если рекурсия хвостовая, то компилятор сам ее в цикл развернет
http://ridiculousfish.com/blog/posts/will-it-optimize.html
1
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
11.09.2014, 22:09 #14
Dani, насколько я понял при беглом взгляде, там рассказывается про то, какой хороший компилятор gcc (а clang возможно еще лучше) и как он оптимизирует не только хвостовую рекурсию, а и другие ее виды и вообще сто всего. Так я же и не спорю, компиляторы умнеют с каждым днем годом, я про хвостовую говорил что точно должны разворачивать (и даже не я, я просто бабку цитировал )
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,295
Записей в блоге: 2
Завершенные тесты: 1
11.09.2014, 22:21 #15
Я подумал, что вам может быть интересно.
0
_Ivana
3232 / 1860 / 235
Регистрация: 01.03.2013
Сообщений: 5,091
Записей в блоге: 5
11.09.2014, 22:29 #16
Dani, а в этом плане... Спасибо, действительно интересно! Бабке расскажу, чтобы в следующий раз более впечатляющие заявления делала
ЗЫ непонятно только упоминание, что компиляторы функциональных языков такое не все могут...
0
11.09.2014, 22:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2014, 22:29
Привет! Вот еще темы с решениями:

В заданном массиве целых чисел найти количество нечётных элементов и произведение чисел, расположенных до минимума
Задан массив целых чисел P(n) . Найти - количество нечётных элементов...

Пофиксите баг? Найти произведение чисел последовательности, не делящихся на 5, наибольшее из таких чисел, и его номер
Привет, форумчане! Помогите отладить программу? Что должна делать: &gt;Дана...

Найти первые N чисел Фибоначчи (рекурсия/итерация, сравнить эффективность)
Найти первые N чисел Фибоначчи двумя способами: с помощью рекурсии и с помощью...

Дана последовательность целых положительных чисел. Найти произведение только тех чисел, которые больше заданного числа М
Дана последовательность целых положительных чисел. Найти произведение только...


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

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

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