![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 25.09.2010
Сообщений: 5
|
![]()
Проходил тест и встретил такой вопрос. Решил разобратся но так и не могу понять принципа, не мог-бы кто-нибудь объяснить? (блок-схемы будет достаточно).
#include <iostream.h> void func(int num) { if(num) func( num-1 ); cout << num; } int main(void) { func(5); return 0; } PS результатом будет: 012345. |
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,726
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 31.05.2009
Сообщений: 786
|
![]()
Что именно не понятно? Функция будет вызывать сама себя пока num не станет равен 0. Затем после каждого возврата будет выводиться цифра. Потому и выводится в обратном порядке. Если вывод сделать перед рекурсивным вызовом
Код:
P.S. немного очепятался. Короче, ответ будет в обратном порядке ![]() Последний раз редактировалось alexcoder; 26.09.2010 в 10:54. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 15.06.2010
Сообщений: 740
|
![]()
Эээээ.. Я конечно с си не знаком, но что-то мне подсказывает что результатом будет 543210
Чтобы понять рекурсию, сперва нужно понять рекурсию.
|
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 25.09.2010
Сообщений: 5
|
![]()
Ну на бумажке не рисовал, но сидел и всматривался в нее 3 часа))
2alexcoder void func(int num) тут подётся 5 по том идет проверка if ( num != 0 ) потом она опять вызывается? только уже с num-1 (т.е. с 4?) или она становится 4, выводится (cout << num) и аж потом вызывается с num-1? но тогда все-равно будет вывод "54321". Это меня и путает. |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 17.09.2010
Сообщений: 229
|
![]()
Допустим 5
Сначала идет вызов функции со значением 4 (5-1) Затем идет вывод 5 на экран. Что тут понимать то? вывод и получается 012345. Потому как сначала через вызовы добирается до 0 выводит сначала его а потом уже раскручивается обратно по возрастанию.
Правильно заданный вопрос - половина ответа!
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 01.02.2007
Сообщений: 785
|
![]()
Постараюсь пояснить развернуто.
2 Zedx - все достаточно просто - поясняю на твоем примере. Вот представь, что у тебя func(1). 1) получается, что внутри func(1) вызывается func(0) - которая печатает 0 2) ну сама функция func(1) - не завершила же свою работу (важно для понимания) ![]() Итак со всеми числами.
Изо всей благодати
В руках крепко сжатых Я донесу только капли Последний раз редактировалось Roof; 26.09.2010 в 00:48. |
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 10.06.2010
Сообщений: 225
|
![]()
Тут лучше всего будет дебаггером вмазаться
![]()
За помощь: Нажмите на весы слева от сообщения!
|
![]() |
![]() |
![]() |
#9 | |
Форумчанин
Регистрация: 17.09.2010
Сообщений: 229
|
![]() Цитата:
Правильно заданный вопрос - половина ответа!
|
|
![]() |
![]() |
![]() |
#10 |
Новичок
Джуниор
Регистрация: 25.09.2010
Сообщений: 5
|
![]()
2 Roof
Спасибо за подробное объяснение ![]() Как я понял, я раньше и не догадывался о времени выполнения) т.е. когда стартует func(5) после нее идет проверка if ( != 0) и получается ПАРАЛЕЛЬНО вызывается еще одна функция func (4) а func(5) - находится в процессе выполнения. потом опять идет проверка ИФа, вызывается func(3) соответственно func(5) и func(4) находятся в процессе выполнения. и так до нуля. А потом уже идет ДОвыполнение. на func(0) проверяется условие, оно соответственно false и выполняется cout с фу-ции func(0) затем довыполняется func(1)...func(5) (их cout-ы). Я все правильно понял?) |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Рекурсивная функция в С++ | Ahellen | Помощь студентам | 7 | 20.09.2010 20:58 |
Обьяснить код. | Дядя Тёма | Фриланс | 1 | 09.06.2010 20:18 |
Нужна ф-ция GetModuleBase или пoмогите переписать ее с c++ на Delphi. | kalexi | Win Api | 0 | 03.02.2010 00:22 |
Фильтрующая ф-ция для мышки | |{ot | Win Api | 0 | 13.11.2009 02:54 |