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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2015, 21:35   #1
Kengoo
Пользователь
 
Регистрация: 05.09.2015
Сообщений: 16
По умолчанию Recursion. 2 integeres are multiplied together.

Объясните пжл выполнение данной рекурсии пошагово.
Например, возьмем recur(3,2) и recur(2,4)

Код:
int recur(int x, int y)
{
	if (x == 0 || y == 0)
		return 0;
	else if (x == 1)
		return y;
	else
		return recur(x-1,y) + y;
}
Kengoo вне форума Ответить с цитированием
Старый 06.09.2015, 21:47   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так вы и объясните. А кто-нибудь может быть поправит если что.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 06.09.2015, 21:54   #3
Kengoo
Пользователь
 
Регистрация: 05.09.2015
Сообщений: 16
По умолчанию

Как я понимаю:
recur(2,2)+2 --> recur(1,2) +2.
Не понимаю что происходит в recur(1,2) и recur(2,2)
Kengoo вне форума Ответить с цитированием
Старый 06.09.2015, 22:27   #4
Kengoo
Пользователь
 
Регистрация: 05.09.2015
Сообщений: 16
По умолчанию

Вроде разобрался:
x is a counter here.
recur(3,2)
Enter x : 3

Enter y : 2

X = 3 Y = 2
X = 2 Y = 2
X = 1 Y = 2
Result is 6

recur(2,4)
X = 2 Y = 4
X = 1 Y = 4
Result is 8
Kengoo вне форума Ответить с цитированием
Старый 06.09.2015, 22:27   #5
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Код:
int recur(int x, int y)
{
	if (x == 0 || y == 0)
		return 0;
	else if (x == 1)
		return y;
	else
		return recur(x-1,y) + y;
}

Представим алгоритм пунктами
входные данные x и y

1) если x или y равно 0, то идем в пункт 6
2) если x равен 1, то идем в пункт 7
3) вызываем функцию recur с параметрами x-1 и y
4) к возвращенному значению прибавляем y
5) возвращаем полученную сумму
6) возвращаем 0
7) возвращаем y

Теперь пробежимся по примеру. Допустим, вызвали recur ( 3 , 2 )

вызов 1:
x = 3
y = 2
1) x == 0 или y == 0? 3 == 0 || 2 == 0 ? Нет, значит идем дальше
2) x == 1 ? 3 == 1 ? Нет, значит идем дальше
3) Вызываем recur ( 3 - 1 , 2 ), пометим это место как 1.3, переходим к разделу "вызов 2"
4) Функция вернула 4. получаем 4 + y = 4 + 2 = 6
5) Возвращаем значение 6 в точку вызова



вызов 2:
x = 2
y = 2
1) x == 0 или y == 0? 2 == 0 || 2 == 0 ? Нет, значит идем дальше
2) x == 1 ? 2 == 1 ? Нет, значит идем дальше
3) Вызываем recur ( 2 - 1 , 2 ), пометим это место как 2.3, переходим к разделу "вызов 3"
4) Функция вернула 2, значит получим 2 + y = 2 + 2 = 4
5) Возвращаем в точку вызова (1.3) значение 4


вызов 3:
x = 1
y = 2
1) x == 0 или y == 0? 1 == 0 || 2 == 0 ? Нет, значит идем дальше
2) x == 1 ? 1 == 1 ? Да, значит в пункт 7 идем
7) Возвращаем в точку вызова (2.3) значение y, то есть 2
Croessmah вне форума Ответить с цитированием
Старый 06.09.2015, 22:36   #6
Kengoo
Пользователь
 
Регистрация: 05.09.2015
Сообщений: 16
По умолчанию

Спасибо, очень доходчиво.
Kengoo вне форума Ответить с цитированием
Ответ


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

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

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