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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2011, 19:56   #21
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

Serge_Bliznykov

спасибо,так ведь GetMax тоже ведь дал правильный код,просто у Вас он более раскрыт,так скажем.

Всё равно обоим Вам человеческое спасибо!!!!
Novenkaja вне форума Ответить с цитированием
Старый 15.02.2011, 20:12   #22
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

хорошо,тогда такой вопрос:
в чём разность двух этих строк?точнее их написания?

recObm:=s[length(s)]+recObm(copy(s,2, length(s)-2))+s[1];

recObm:=S[Length(S)]+recObm(copy(s,1, length(s)-1));

и зачем тогда в условии даётся,что не больше 256 символов?
это имеется ввиду,чтобы знать,акой тип переменоой задавать?
Novenkaja вне форума Ответить с цитированием
Старый 15.02.2011, 21:03   #23
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

У типа string максимальный размер 255 символов

Функция у меня вызывается в 2 раза меньше чем у GetMax
моя версия должна работать в раза быстрее

Так должно еще быстрее
Код:
  recObm:=s[length(s)]+s[Length(s)-1]+recObm(s)+s[2]+s[1]
Надо выбирать оптимальное отношение размер кода/скорость работы

Я на Delphi пишу
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 15.02.2011, 21:04   #24
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
чём разность двух этих строк?точнее их написания?
1-я строчка (кстати, не надо мне чужой славы - это не мой код, это код (c) New man ):
Перевёртыш(Строки_S) равен Последний_символ строки_S + Перевёртыш(_внутренней_части_Строки _S) + Первый_символ_строки_S

_внутренней_части_Строки_S - это строка S без первого и последнего символа

2-й вариант:
Перевёртыш(Строки_S) равен Последний_символ строки_S + Перевёртыш(Часть_Строки_S_без_после днего_символа)

распишите на бумажке на примере какого нибудь простенького слова, тогда станет понятнее. (и, кстати, можете в отладчике пошагово пройтись, наблюдая за переменной S и результатом, который возвращает рекурсивная функция.

Цитата:
и зачем тогда в условии даётся,что не больше 256 символов?
это имеется ввиду,чтобы знать,акой тип переменоой задавать?
точно не скажу. Но, скорее всего, именно для этого.
Вероятно это указание на то, чтобы использовать тип String (а не массив, например). Хотя тут есть неточность:
в TurboPascal строки не могут быть длиной более 255 символов!



ну и не могу удержаться от пары шуток на тему рекурсии:

Чтобы понять рекурсию надо понять рекурсию.

в энциклопении терминов программиста:
Рекурсиясм. Рекурсия

рекурсия в песне:
я оглянулся посмотреть, не оглянулась ли она, посмотреть не оглянулся ли я...



________________________
Добавлено
Цитата:
Сообщение от New man
Так должно еще быстрее
Код:
recObm:=s[length(s)]+s[Length(s)-1]+recObm(s)+s[2]+s[1]
А вот тут, коллега, Вы, в погоне за скоростью получили ошибочный код!
Получите, например, этой "быстрой" функцией "перевёртыш" слова АУ... и получите переполнение стека!
Только не надо мне рассказывать, как можно дописать дополнительную проверку, чтобы такой код заработал!

Последний раз редактировалось Serge_Bliznykov; 15.02.2011 в 21:10.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.02.2011, 21:10   #25
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

спасибо Вам ребята!!!!

насчёт первой шутки знаю,уже слышала)))

спасибо за объяснение,да,попробую на листе написать и просмотреть как это работает.

насчёт как идёт s,поняла,это через debug)))
спасибо))))
Novenkaja вне форума Ответить с цитированием
Старый 15.02.2011, 21:18   #26
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

я уже отослала преподователю тот,что отредактировали Вы:Serge_Bliznykov

всем спасибо)))
Novenkaja вне форума Ответить с цитированием
Старый 15.02.2011, 21:21   #27
XandrMoro
 
Регистрация: 15.02.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну и не могу удержаться от пары шуток на тему рекурсии:
Коктейль "Рекурсия": 30% спирта, 20% воды, 50% коктейля "Рекурсия"
XandrMoro вне форума Ответить с цитированием
Старый 16.02.2011, 16:03   #28
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

забавная шутка,надо будет своим в универе рассказать)))

оценила на все 100%

Serge_Bliznykov

кст я на листе прокрутило это через первый вид формулы,и через второй,получилось то,что нужно))))
так даже легче и сделать и понять)))

ещё раз спасибо))))
Novenkaja вне форума Ответить с цитированием
Старый 16.02.2011, 16:57   #29
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

рекурсия тут нужна как собаке пятая нога, но если уж такое задание, вот вариант, который хотя бы не создаёт новые строки на каждой итерации.

Код:
procedure reverse(var s: string; index: integer = 1);
var
  c: char;
begin
  if (index <= length(s) shr 1) then begin
    //
    c := s[index];
    s[index] := s[length(s) - index + 1];
    s[length(s) - index + 1] := c;
    //
    reverse(s, index + 1);
  end;
end;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на рекурсию Rusl92 Помощь студентам 1 13.01.2011 22:36
Задача на рекурсию(( kinza Помощь студентам 6 08.06.2009 09:51
Задача на рекурсию. KoHgpaT Паскаль, Turbo Pascal, PascalABC.NET 4 22.12.2006 20:49