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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2009, 18:56   #1
leshax
 
Регистрация: 17.01.2009
Сообщений: 6
Сообщение Проконсультируйте насчет рекурсии.

Код:
#include <iostream>
using namespace std;

int sum(int a[], int size)
{
	if(size==1)
		return a[0];
	int s=sum(a,size-1)+a[size-1];
	return s;
}

void main()
{
	const int size = 5;
	int a[size]={2,3,4,9,1};
	cout<<sum(a,size)<<endl;
}
Вот есть алгоритм который считает сумму элементов массива. Итак. Вначале создаются размер массива и сам массив, потом вызывается функция передавая эти значения. После этого вдальнейшем эта функция вызывает саму себя и делает определённый код и возвращает каждый раз какоето значение до того момента как size не будет равен 1, а когда он становится 1 идёт возвращие ПЕРВОГО ЕЛЕМЕНТА массива a (return a[0] и по идее выводится должен просто первый елемент массива, но выводится сумма елементов. Почему?

Последний раз редактировалось leshax; 17.01.2009 в 18:59.
leshax вне форума Ответить с цитированием
Старый 17.01.2009, 22:11   #2
Freer
Пользователь
 
Аватар для Freer
 
Регистрация: 20.10.2008
Сообщений: 64
По умолчанию

А ты как думаешь?) У тебя ж a[0] каждый раз получает следующее знеачение a[1] потом a[2] и т.д. а функция их суммирует.Хочешь вывести первый элемент создай переменную ещё одну.Помойму как 2*2 ))
FreeR
Freer вне форума Ответить с цитированием
Старый 18.01.2009, 21:39   #3
delete
Пользователь
 
Регистрация: 18.11.2008
Сообщений: 14
По умолчанию

Первый элемент не выведет никогда, только когда size будет инициализирована как 1, тогда получишь первый элемент, в другом случае получишь сумму, а сравнение с 1 это просто остановка рекурсии
delete вне форума Ответить с цитированием
Старый 19.01.2009, 10:44   #4
Reskov
Форумчанин
 
Аватар для Reskov
 
Регистрация: 17.12.2008
Сообщений: 250
По умолчанию

Сразу входные параметры в функцию a={2,3,4,9,1},size=5
size!=1 => s+=sum(a,4)+a[4];
след шаг
Вычисляем sum(a,4) что бы затем прибавить его к s из первого шага;
для sum(a,4)=sum(a,3)+a[3] надо вычислить sum(a,3);
и т д пока size!=1
В маин sum(a,5) будет равно первому return из sum, return вовремя рекурсивных вызовов не обрабатывает в маин
Reskov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Срочно! Вопрос по БД. Проконсультируйте пожалуйста... MercuryStar Помощь студентам 1 22.07.2008 08:59
Проконсультируйте новичка пожалста Luka83 Microsoft Office Word 1 19.02.2008 07:39
Насчет формы!!! KlErik Общие вопросы Delphi 4 26.05.2007 10:59