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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2014, 07:24   #1
христик
Пользователь
 
Регистрация: 03.12.2011
Сообщений: 16
Смущение Делфи рекурсия

Помогите пожалуйста разобраться в теме рекурсия

вот допустим дана программа:
Код:
function M(mm1:byte):bute;
  var mm:bute;
begin readln(mm);
        if mm<20 then m:=5;
        if mm1>=33  then m(mm/20);
end;
1.Условие выхода из рекурсии:
mm>=20
mm<20
mm1>=33
mm1<33
и главное почему?

2.И какой параметр позволяет передавать значения с одного уровня на другой?

3. как рассчитать глубину рекурсии?

Последний раз редактировалось Serge_Bliznykov; 23.01.2014 в 08:45.
христик вне форума Ответить с цитированием
Старый 23.01.2014, 08:55   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

очевидно же, что условие выхода из рекурсии это
Код:
mm1<33
Цитата:
и главное почему?
а вы попробуйте дать определение, что такое рекурсия.
И поймёте, что рекурсия, это вызов подпрограммой САМОЙ СЕБЯ.
попробуйте найте внутри функции M участок кода, где вызывается функция M
и попробуйте по коду понять, в каком случае этот вызов происходит...
Так вот, условие, обратное тому, когда происходит рекурсивный вызов и является условием выхода из рекурсии.

Цитата:
2.И какой параметр позволяет передавать значения с одного уровня на другой?
mm1:byte

Цитата:
3. как рассчитать глубину рекурсии?
сколько раз вызовется внутри себя подпрограмма, такой и уровень рекурсии.


p.s. нелишним будет заметить, что код примера у Вас КРИВОЙ!
во-первых, в Delphi ваш код вообще не скомилируется!!
ибо нет такого типа, как bute
И результат деления это ВЕЩЕСТВЕННОЕ (дробное) число, а параметром рекурсивной функции является целочисленный параметр (byte)
во-вторых, функция тем и отличается от процедуры, что возвращает значение. В вашем случае возвращаться будет мусор (вы ничего не возвращаете), но и не используете нигде результат данной функции. Логичней было заменить функцию на процедуру (заменить слово function на слово procedure )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.01.2014, 09:30   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Код:
if mm<20 then m:=5;
То ли букву потерял, то ли глобальную переменную юзает .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 23.01.2014, 09:32   #4
христик
Пользователь
 
Регистрация: 03.12.2011
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Код:
if mm<20 then m:=5;
То ли букву потерял, то ли глобальную переменную юзает .
по моему m:=5 это вообще вызов функции)))
христик вне форума Ответить с цитированием
Старый 23.01.2014, 09:46   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от христик
по моему m:=5 это вообще вызов функции)))
нет. это как раз и есть присвоение результата, который данная функция вернёт на выходе!

Цитата:
Сообщение от Utkin
То ли букву потерял, то ли глобальную переменную юзает
обратите внимание на название самой функции!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бросок к горизонту(паскаль+-делфи.(может ли кто помочь сделать с Паскаля АВС на Делфи?) extrimal Помощь студентам 8 24.03.2013 23:51
Рекурсия на Делфи 7 unknownspace Помощь студентам 3 10.07.2012 14:26
помогите написать программу в делфи. (рекурсия) Snord Помощь студентам 6 31.05.2011 21:39
рекурсия на делфи sergi Помощь студентам 0 15.03.2011 16:02