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

Рекурсия - C++

Восстановить пароль Регистрация
 
alekopi
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 8
01.05.2013, 16:09     Рекурсия #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
void gg(int a,int b)
{   int i=0;
    if(a==20) 
    return;
    printf("%d\n",a);
    printf("%d\n",b);
    gg(a+1,b-1);
    gg(a+1,b);
}
void main()
{
    gg(16,10);
 
}
Объясните пожалуйста что делает return ,когда if true что куда возвращается и что потом вызывается - я запутался
до return все понятно - рекурсивный вызов gg(a+1,b-1); до тех пор пока a!=20
т.е. передаем функции gg: 16 и 10 - консоль выводит 17 и 9 ; 18 и 8; 19 и 7 а ДАЛЬШЕ что консоль выводит и почему столько много чисел я не понял
объясните пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.05.2013, 16:18     Рекурсия #2
alekopi, функция gg выводит свои аргументы a,b, если a не равно 20. Потом вызывает себя дважды с измененными аргументами.
Вопрос не в том, что выводит, вопрос что должно выводить. Задание есть, или откуда код?
На тему return: это просто выход из функции, когда a равно 20.
alekopi
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 8
01.05.2013, 17:35  [ТС]     Рекурсия #3
код сам написал
в кернигане есть код быстрой сортировки(Ч.А.Р. Хоар) и я не могу его разобрать что там и как в нем происходит
тема Рекурсия.
там вызов функции в ней двойной вызов этой же функции и еще в if есть return
и я попробовал написать похожий код только попроще...все равно не понял что мне компилятор выводит после того как в return попал.

Добавлено через 2 минуты
с помощью f10 и точки останова в функции все равно не могу до конца разобраться - все равно нить логики у меня теряется после попадания в return
что возвращается и что потом вызывается я не могу понять
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
01.05.2013, 18:50     Рекурсия #4
Цитата Сообщение от alekopi Посмотреть сообщение
тема Рекурсия.
Суть рекурсии в том, что функция вызывает сама себя, но чтобы эта цепочка не была бесконечной при каких-то условиях функция должна завершаться не вызывая себя (return). В Вашем случае, например, увеличивается аргумент, и при достижении значения 20 как раз наступает конец рекурсии. Однако, если Вашу функцию вызвать с параметром a равным 20 или более, завершения рекурсии не будет (ну только пока стек не переполнится или int).
Yandex
Объявления
01.05.2013, 18:50     Рекурсия
Ответ Создать тему
Опции темы

Текущее время: 00:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru