|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
|||||||||||
Рекурсия vs цикл с точки зрения производительности29.08.2015, 18:43. Показов 8746. Ответов 26
Метки нет (Все метки)
Здравствуй, дорогой форум!
Написал алгоритм для отображения десятичных чисел в двоичной системе в двух вариантах: с использование рекурсии и цикла: Первый вариант(используем рекурсию):
0
|
|||||||||||
| 29.08.2015, 18:43 | |
|
Ответы с готовыми решениями:
26
Выбор встроенной базы данных с точки зрения производительности Как лучше реализовать сервер с точки зрения производительности? Drawingvisual или Usercontrol: какой вариант будет реализовать правильней с точки зрения производительности |
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
|||||||||
| 29.08.2015, 19:01 | |||||||||
![]()
1
|
|||||||||
|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
||
| 29.08.2015, 19:28 [ТС] | ||
|
Да, такие мы маньяки, лёгкие пути - это не для нас! Если серьёзно, то ваш код, конечно, выглядит куда более лаконично, чем мой том войны и мира, но мне он непонятен с моими текущими знаниями языка. Написал, как смог.) В любом случае на мой вопрос вы ответили, так что ловите спасибо! shmkv P.S. А как называется такой оператор: ">>="? По символам гугл ничего не находит. Хотел бы понять ваш код.
0
|
||
| 29.08.2015, 19:32 | |
|
Alexey104, ссылаясь на материал из книги Дейтелов по Си++, могу сказать что, итеративный (циклический) метод вычисления, как правило, менее ресурсоемкий => более быстрый. Но бывают такие случаи, когда решение задачи рекурсивным образом бывает проще с точки зрения объема кода и его отладки. Например, создание динамических структур данных по типу дерева.
0
|
|
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
|
| 29.08.2015, 19:36 | |
|
0
|
|
| 29.08.2015, 19:37 | ||
|
1
|
||
|
196 / 197 / 120
Регистрация: 27.05.2011
Сообщений: 545
|
||
| 29.08.2015, 19:41 | ||
|
Аналогично более популярное a += b.
1
|
||
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
||
| 29.08.2015, 19:48 | ||
Сообщение было отмечено Alexey104 как решение
РешениеДобавлено через 42 секунды для x =>> 1 <=> x /= 2; Добавлено через 53 секунды Суть всего алгоритма : в первом цикле я ищу первый единичный бит слева, а во втором последовательно вывожу биты слева направо.
0
|
||
|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
|
| 29.08.2015, 19:55 [ТС] | |
|
Всем спасибо за участие!
Буду разбираться с ">>="...
0
|
|
| 29.08.2015, 20:03 | ||
|
Alexey104, да, Дейтелы мне понравились. Для новичков достаточно полно описывают, но это не первая моя книга по Си++, поэтому в крайне редких случаях может быть иногда недостаточно понятно для человека, читающего впервые.
Добавлено через 3 минуты Например 10101001>>1 равно 01010100 (последний бит стерся, грубо говоря, а первый стал нулем, хотя это и не всегда так бывает (посмотрите в интернете про арифметический и логический сдвиг))
0
|
||
|
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
|
||
| 29.08.2015, 20:04 | ||
|
0
|
||
|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
|
| 29.08.2015, 21:16 [ТС] | |
|
shmkv, Ещё раз спасибо, всё понятно.
0
|
|
| 29.08.2015, 23:37 | ||
![]() А если серьезно - то на вопрос ТС нормального ответа так и не было. Но в этом разделе форума квалифицированные участники часто ленятся расписывать правильные ответы, могу предложить только мой недавний пример, приведенный для забаненного ныне участника - Объясните работу рекурсивной функции из книги Г. Шилдта
1
|
||
|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
||||||||||||
| 30.08.2015, 03:14 [ТС] | ||||||||||||
|
_Ivana, Спасибо, интересно было почитать.
рекурсия:
Запустил второй вариант с х = 50 - результат был выведен на экран мгновенно после нажатия клавиши "Enter".
0
|
||||||||||||
| 30.08.2015, 03:27 | ||
![]() Хорошо, наивную экспоненциальную рекурсию вы пощупали. Теперь можно попробовать реализовать тех же Фибоначчей также рекурсивными функциями, но 1) экспоненциально с мемоизацией 2) линейно рекурсивно 3) линейно хвосторекурсивно - с аккумулятором. И замерить время, сравнить с вариантом с циклом. Последний вариант можно даже посмотреть ассемблерный скомпилированный листинг и также сравнить с циклом.
0
|
||
|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
|||
| 30.08.2015, 03:37 [ТС] | |||
|
0
|
|||
| 30.08.2015, 03:40 | ||||||||
Можете посмотреть мои рекомендации в теме по ссылке. А пока вам для развлечения ваша же экспоненциально рекурсивная функция но с мемоизацией - пункт 1 по моему списку.
0
|
||||||||
|
4 / 4 / 0
Регистрация: 26.10.2014
Сообщений: 105
|
|||
| 30.08.2015, 19:44 [ТС] | |||
|
Большое спасибо, завтра буду штудировать, а сейчас не мешало бы всхрапнуть, а то башка уже совсем ничего не соображает...
Добавлено через 15 часов 19 минут _Ivana, Ваш алгоритм мне понятен, и, в отличие от моего, он считает молниеносно. Откуда такая разница в быстродействии, я так и не понял, но полагаю, для ответа на этот вопрос нужно изучить ваш список. Буду гуглить, если будут вопросы, задам здесь... Добавлено через 28 минут
0
|
|||
| 30.08.2015, 21:57 | |||||||
Сообщение было отмечено Alexey104 как решение
Решение
Alexey104, правильно говоришь, Дядя Федор
Называется мемоизация (или в простонародии динамическое программирование). Мощная технология, т.к. позволяет быстро считать и такие рекурсивные функции, которые в циклы развернуть не так тривиально, как Фибоначчей.А дальше я бы все-таки посоветовал вам почитать SICP - хотя бы начало, про итеративные и рекурсивные алгоритмы. Любую рекурсию можно реализовать через циклы - только придется вручную формировать стеки параметров вызовов (что при рекурсии компилятор сделает сам) - про это можно почитать у Кнута. Любые циклы можно реализовать через рекурсию - и для этого вообще не придется ничего костылить. Например, ваш вышеприведенный код циклического вычисления Фибоначчей с последующем же циклическим их выводом на печать - можете попробовать это сделать - это не сложно, но забавно. Если будет сложно - покажу как. Для понимания этого достаточно попрограммировать на любом функциональном языке - в некоторых языках вообще циклов нет как таковых Причем, циклический итеративный алгоритм можно реализовать через частный случай рекурсии - т.н. "хвостовую". Самое забавное, что оптимизирующий компилятор сгенерирует для этого кода точно такой же ассемблерный набор команд, что и для цикла. И здесь мы возвращаемся к SICP - неважно в какой форме реализован алгоритм - в рекурсивной или в итеративно-циклической, главное какая у него структура - итеративная или рекурсивная.Добавлено через 1 час 8 минут ЗЫ ладно, вот ваш второй кот, переписанный через рекурсию:
1
|
|||||||
| 30.08.2015, 21:57 | |
|
Помогаю со студенческими работами здесь
20
Если два метода выполняют одно и то же - с точки зрения программы, но разное - с точки зрения логики? С точки зрения закона C точки зрения професcионала. Меню с точки зрения юзабилити БП с точки зрения потребления энергии Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|