Что более ресурсоемкое? Цикл или рекурсия?

1. Altair777 644 17.06.09 23:27 Сейчас в теме
Сравните 2 функции. И выскажите свое мнение: что из них больше потребляет процессорного времени и памяти:
Функция Родители(Элем, Сп)
    Перем Род;
    Род=Элем.Родитель;
    Пока ПустоеЗначение(Род)=0 Цикл
        сп.ДобавитьЗначение(Род);
        Род=Род.Родитель;
    КонецЦикла;
    Возврат сп;
КонецФункции
Показать


Процедура УсеРодители(элем, сп)
    Если ПустоеЗначение(элем.Родитель)=1 Тогда
        Возврат;
    Иначе
        сп.ДобавитьЗначение(элем.Родитель);
        УсеРодители(элем.Родитель,сп);
    КонецЕсли;
КонецПроцедуры
+
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. venger 2121 17.06.09 23:37 Сейчас в теме
(1) Кстати, не совсем корректно, у тебя список значений создается в функции, у меня за ее пределами:-)
+
3. Altair777 644 17.06.09 23:42 Сейчас в теме
4. venger 2121 17.06.09 23:47 Сейчас в теме
(3) Давай эти две строчки еще удалим у тебя для чистоты эксперимента? Будем предполагать, что список пуст.
-------------
Перем Род;
сп.УдалитьВсе();
-------------

З.Ы. А как память замерить в отладчике? Я отладчиком в 1С еще не разу толком не пользовался:-) Вот время нашел как мерять, вернее как-то игрался, знаю:-)))
+
5. Altair777 644 17.06.09 23:53 Сейчас в теме
(4) Вторую убрал. А зачем 1 строку удалять?
Я тебе и так могу сказать про память.... При оооочень большом количестве вызовов система рухнет :-)
Кая я понимаю, каждая вызванная процедура(функция) откусывает кусок оперативки, даже если в ней не создаются локальные переменные.
+
6. venger 2121 18.06.09 00:09 Сейчас в теме
(5) Ну, естественно, рекурсия и медленнее, да и скорее всего затратнее по памяти в 1С в семерке, по времени больше занимает, я замерил:) А при большом количестве вызовов и то, и то рухнет, памяти на хранение списка значений не хватит:) А в других средах интересно? В С как, например? Кто знает, мерил?
+
7. venger 2121 18.06.09 00:47 Сейчас в теме
(5) Родилась шутка:-) Рекурсия, она как женщина, - затратна, но как красива, чертовка:-)))
+
8. Ish_2 1104 18.06.09 01:41 Сейчас в теме
9. venger 2121 24.06.09 13:33 Сейчас в теме
10. Altair777 644 25.06.09 12:12 Сейчас в теме
Александр Венгер пишет:
памяти на хранение списка значений не хватит:)


Это просто будет выполняться бесконечно
Функция Родители() 
    Пока 1=1 Цикл 
    КонецЦикла; 
    Возврат 1; 
КонецФункции


А это через n-ое количество времени еще и повесит винду из-за недостатка памяти
Процедура УсеРодители() 
    УсеРодители(); 
КонецПроцедуры
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот