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

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

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2017, 15:55   #1
pram
Новичок
Джуниор
 
Регистрация: 17.11.2017
Сообщений: 11
По умолчанию Рекурсия

Помогите, пожалуйста, понять рекурсию на след. примере..

<rec> <= [ <rec> X <rec> YY <rec> | <rec> YY <rec> X <rec> ]

Это EBNF...
[] означает опция
| означает выбор из двух альтернатив
Ответы могут быть следующими: XYY, YYX, XYYYYX, XXYYYY.

Т.е. получается, что если мы выбираем сначала левый вариант:
<rec> X <rec> YY <rec>, то происходит следующее:
Вызывается например первая <rec> в списке два раза, по ее окончании, выдается "X" и мы заходим во вторую <rec>.. а дальше у меня путаница начинается, как же это можно себе представить наглядно?

Спасибо за любой совет!!
pram вне форума Ответить с цитированием
Старый 17.11.2017, 16:03   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Тут ничего не вызывается. EBNF - это описание.

Цитата:
<rec> X <rec> YY <rec>, то происходит следующее:
Вызывается например первая <rec> в списке два раза, по ее окончании, выдается "X" и мы заходим во вторую <rec>.. а дальше у меня путаница начинается, как же это можно себе представить наглядно?
Ничего не происходит. Это говорит, что rec имеет формат *X*YY*, где на месте * стоит rec, который имеет формат... и т.д.
p51x вне форума Ответить с цитированием
Старый 17.11.2017, 16:04   #3
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Нарисуйте дерево!
Дерево рекурсивных вызовов.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 17.11.2017, 21:23   #4
pram
Новичок
Джуниор
 
Регистрация: 17.11.2017
Сообщений: 11
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Тут ничего не вызывается. EBNF - это описание.


Ничего не происходит. Это говорит, что rec имеет формат *X*YY*, где на месте * стоит rec, который имеет формат... и т.д.
Я прекрасно представляю себе, что такое EBNF. "Вызывается" можно было поместить мной в кавычки, но не думал, что так к словам можно придираться. И происходит здесь многое. И мне нужно понять, какой результат этого описания является возможным, а какой нет. Например, описание
<rec> <= | X <rec> YY
дает возможность записать такие элементы XXX YYYYYY. И используется здесь рекурсия, но данный пример я себе хорошо представляю, а вот вышеуказанный нет. Ваше объяснение, к сожалению, крайне непонятно, но спасибо за попытку.
pram вне форума Ответить с цитированием
Старый 17.11.2017, 21:28   #5
pram
Новичок
Джуниор
 
Регистрация: 17.11.2017
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Plague Посмотреть сообщение
Нарисуйте дерево!
Дерево рекурсивных вызовов.
Не подскажите, где можно об этом почитать, чтобы понять, как строится такое дерево? Ничего путевого поиск в гугле не выдал..
pram вне форума Ответить с цитированием
Старый 17.11.2017, 21:46   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Например, описание
<rec> <= | X <rec> YY
дает возможность записать такие элементы XXX YYYYYY. И используется здесь рекурсия, но данный пример я себе хорошо представляю, а вот вышеуказанный нет.
Только они ведь ничем не отличаются...
p51x вне форума Ответить с цитированием
Старый 17.11.2017, 21:56   #7
pram
Новичок
Джуниор
 
Регистрация: 17.11.2017
Сообщений: 11
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Только они ведь ничем не отличаются...
<rec> <= [ <rec> X <rec> YY <rec> | <rec> YY <rec> X <rec> ]
--> YYX возможно

<rec> <= | X <rec> YY
--> YYX невозможно, а значит данные описания не эквивалентны.
pram вне форума Ответить с цитированием
Старый 17.11.2017, 22:00   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Я не про их "равенство" друг другу, а про подход/построение и т.д. И если вы понимаете, как работаете второе, то и первое работает абсолютно также.
p51x вне форума Ответить с цитированием
Старый 17.11.2017, 22:26   #9
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от pram Посмотреть сообщение
Помогите, пожалуйста, понять рекурсию на след. примере..

<rec> <= [ <rec> X <rec> YY <rec> | <rec> YY <rec> X <rec> ]
Это плохой пример, так как он не входит в классификацию Хомского.

Цитата:
Сообщение от pram Посмотреть сообщение
<rec> <= | X <rec> YY
Этот гораздо лучше.

Цитата:
Сообщение от pram Посмотреть сообщение
<rec> <= | X <rec> YY
дает возможность записать такие элементы XXX YYYYYY.
Тут явно ошибка.


pram Какие у вас есть навыки в работе с рекурсией? Какие задачи уже решали?
а) Фибоначчи
б) размен денег монетами
в) обход в ширину
г) обход в глубину
д) проверка скобок на правильность
е) проверка трёх разных видов скобок на правильность
ж) регулярные выражения.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 17.11.2017, 22:27   #10
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

П.С. Забыл спросить вас интересует генерация последовательностей по языку или распознавание входной последовательности?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия MaSS93 Паскаль, Turbo Pascal, PascalABC.NET 0 24.05.2012 18:52
рекурсия на С++ erfo Помощь студентам 2 23.05.2012 19:06
рекурсия Lena neznayka Помощь студентам 2 16.06.2010 20:46
Рекурсия Solnze2 Паскаль, Turbo Pascal, PascalABC.NET 0 09.06.2010 09:28
рекурсия qwerty98765 Помощь студентам 1 10.04.2010 15:22