Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Цикл или рекурсия (https://javascript.ru/forum/misc/48533-cikl-ili-rekursiya.html)

foo 07.07.2014 22:01

Цитата:

Сообщение от kobezzza
с пруфом

И первоначально ты утверждал, что выигрышь в десятки раз. Так что пруфа я не вижу.

foo 07.07.2014 22:04

Цитата:

Сообщение от kobezzza
for

Это че не цикл у тебя? Ты уж если за рекурсию, давай пример чисто рекурсивной реализации. А то я уж начинаю подозревать, что ты и не знаешь, что такое рекурсия. Ты ведь знаешь?

kobezzza 07.07.2014 22:05

Цитата:

Сообщение от foo (Сообщение 319893)
И первоначально ты утверждал, что выигрышь в десятки раз. Так что пруфа я не вижу.

Где я писал вообще что-то про выигрыш. Я писал что рекурсия очевиднее и проще и кода писать меньше и что не нужно оптимизировать то, что и так возможно будет с оптимизировано или в принципе нет смысла оптимизировать и дал ссылку с реализаций паттерна "примесь" на циклах, который хотя я сам его писал, но гораздо запутанней классической реализации на рекурсии.

kobezzza 07.07.2014 22:06

Цитата:

Это че не цикл у тебя? Ты уж если за рекурсию, давай пример чисто рекурсивной реализации. А то я уж начинаю подозревать, что ты и не знаешь, что такое рекурсия. Ты ведь знаешь?
Ты обкурился?

removeFolder(cat) {
    for (var i = 0; i < cat.length; i++) {
        if (isFile(cat[i])) {
            unlink(cat[i]);
        } else {
            removeFolder(cat[i]);
        }
    }

    rmdir(cat);
}


removeFolder(cat[i]);


А это что? Я начинаю подозревать, что ты идиот (хотя стоп, я в этом уверен).

Цитата:

Ты уж если за рекурсию, давай пример чисто рекурсивной реализации.
Не нужно перевирать слова пытаясь казаться умным. Я говорил, что рекурсия очевидное и хорошее решение для многих задач, а не "нахуй циклы, хреначим всё на рекурсиях".

foo 07.07.2014 22:08

Цитата:

Сообщение от kobezzza
Да ну

Ты понимаешь, что профит хвостовой рекурсии заключается в отсечении не нужных ветвей вычисления? Если ты напишешь внутри хвосто-рекурсивного вызова read-from-user-input твой код замерзнет вообще. Но это не отменяет отсечения лишних ветвей вычислений.

foo 07.07.2014 22:11

Цитата:

Сообщение от kobezzza
А это что?

Да, это рекурсивная функция, которая внутри содержит цикл. Циклы в перемежку с рекурсией -- это некомильфо в фп, ты понял о чем я, не придуривайся.

зы код пока не смотрел.

kobezzza 07.07.2014 22:12

Цитата:

Ты понимаешь, что профит хвостовой рекурсии заключается в отсечении не нужных ветвей вычисления?
Я говорю о конкретной реализации, а не о сферических конях в вакууме. eval как красная тряпка - вижу, значит ничего не делаю, никаких оптимизаций, тупое воспроизведение байт-кода "как есть".

kobezzza 07.07.2014 22:13

Цитата:

Циклы в перемежку с рекурсией -- это некомильфо в фп
Всё с тобой ясно...

foo 07.07.2014 23:44

kobezzza,
короче, не буду лить воды. Я проверил в ноде на следующем коде:
Код:


fs=require("fs")
write=function(){
        fs.writeFileSync("./counter.txt", counter)
}

fu=function(){counter++; write(); fu()}
counter=0
fu()

path.js:163
    resolvedTail = normalizeArray(resolvedTail.split(/[\\\/]+/).filter(f),
                                              ^
RangeError: Maximum call stack size exceeded

Эта функция 100% содержит хвосторекурсивный вызов. Если бы оптимизация была, этот код выполнялся бы бесконечно. Как видишь, никаких эвалов и прочих Function тут нет. Выполнение остановились на 25104
Попробуй на своей модной новейшей ноде, потом расскажешь. А пока я засчитываю тебе слив. В JS нет оптимизации хвостовой рекурсии.

melky 08.07.2014 00:38

Цитата:

Сообщение от foo (Сообщение 319878)
kobezzza,
Ты уверен, что ты понимаешь о чем говоришь?
Код:

fact=function(n){if(n<2) return 1; return n*(fact(n-1))}
Это не хвосто-рекурсивный код. его соптимизировать невозможно.

единственный кейс для кодогенерации и eval в JavaScript

Цитата:

Сообщение от foo (Сообщение 319878)
невозможно.

я бы так не говорил :no:


Часовой пояс GMT +3, время: 14:59.