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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2013, 17:07   #1
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию рекурсии

Написать функцию, которая рекурсивно вычисляет сумму чисел в заданном диапазоне


Код:
long int Fact(long int N)
{
	// если произведена попытка вычислить факториал нуля 
	// или единицы - вернуть 1,
	// именно здесь произведется выход из рекурсии	
	if (N == 1 || N == 0) return 1;
	// любое другое число вызывает функцию заново с формулой N-1
	else return N * Fact(N-1);
}

void main()
{
   long number=5;
   //первый вызов рекурсивной функции
   long result=Fact(number);
   cout<<"Result "<<number<<"! is - "<<result<<"\n";
}


как задать диапазон плиз

Последний раз редактировалось mixon-21; 20.05.2013 в 17:27.
mixon-21 вне форума Ответить с цитированием
Старый 20.05.2013, 17:39   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

У Вас приведен код вычисления факториала числа с помощью рекурсии.
Этот код практически никак не коррелирует с задачей (не считая использования рекурсии).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.05.2013, 17:46   #3
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

А с чего начать подскажите плиз
mixon-21 вне форума Ответить с цитированием
Старый 20.05.2013, 17:53   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Для начала, придумать, как применить рекурсию.
Например:
Код:
int
sum(int a, int b)
{
    if (a < b) {
        return a + b + sum(a + 1, b - 1);
    }  else if (a == b) {
        return a;
    } else {
        return 0;
    }
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.05.2013, 18:07   #5
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

а можно коменты плиз
mixon-21 вне форума Ответить с цитированием
Старый 20.05.2013, 18:11   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Нет, тогда Вам вообще ничего не останется делать
Возьмите для примера sum(1,3) и sum(1,4). На бумаге осуществите все "вызовы". Если проделаете это честно, то разберетесь в рекурсии хоть немного.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.05.2013, 20:11   #7
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

ок буду думать
mixon-21 вне форума Ответить с цитированием
Старый 21.05.2013, 14:57   #8
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

В циклах код такой


Код:
#include<iostream>

using namespace std;
void main(){
int a,b,sum=0;
cin>>a>>b;
for(int i=a;i<=b;i++){
	
	
	sum+=i;
}
	cout<<sum;

}

Правильно??????????????????????
mixon-21 вне форума Ответить с цитированием
Старый 21.05.2013, 15:11   #9
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Изрядная часть рекурсивных построений следует довольно простой схеме:
1) Сказать: "пусть у нас есть требуемая нам функция" (пусть S(a,b) - функция суммы чисел от a до b).
2) Найти какие-то условия, при которых значение функции уже известно (если b<a, то S(a,b)=0).
3) Придумать, увидеть инвариант - некое соотношение между функцией и её аргументами (если a<=b, то S(a,b) = a+S(a+1,b)). Желательно выстроить такую функцию, что по обе стороны равенства инварианта находятся только значения функции при разных аргументах (R(a,b,c) такова, что R(a,b,0)=S(a,b), при b<a R(a,b,c)=c, при a<=b R(a,b,c)=R(a+1,b,a+c)).
4) Воплотить в коде. Функция R - это по сути Ваш цикл, R(i,b,sum)=R(i+1,b,sum+i) - итерация цикла; начали с R(a,b,0), обратите внимание.
Abstraction вне форума Ответить с цитированием
Старый 21.05.2013, 15:12   #10
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

(дубль, удалено)
Abstraction вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рекурсии fre Паскаль, Turbo Pascal, PascalABC.NET 2 03.04.2012 09:59
Организация рекурсии Rekky Общие вопросы C/C++ 6 24.08.2011 17:22
Задача по рекурсии Болванка Паскаль, Turbo Pascal, PascalABC.NET 1 21.12.2010 16:01
Рекурсии RAMA Паскаль, Turbo Pascal, PascalABC.NET 6 18.10.2009 13:56
Рекурсии Logan Паскаль, Turbo Pascal, PascalABC.NET 1 13.05.2008 08:52