1. Python / Говнокод #16156

    −96

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    def cycl(a):
        if cycl(a) == True:
            return False
        else:
            return
     
    print cycl(True)

    Очень нужный код

    Запостил: pl7ofit, 13 Июня 2014

    Комментарии (24) RSS

    • Переполняет стек и падает? Но зачем?
      Ответить
    • Нихрена не понял. Откуда взято? Нахуя вобще написано? Проще уже написать
      def func():

      func()

      только нахуя??
      Ответить
      • Ищу астронома с большим, гм, телескопом...
        Ответить
      • Проще написать
        sys._exit()
        Тоже убивает интерпретатор без какого-либо шанса отреагировать.
        Ответить
        • Возможно, вы имели в виду os._exit?

          А бесконечную рекурсию питон ловит.
          RuntimeError: maximum recursion depth exceeded
          Ответить
          • смотря какой питон. питон питону рознь
            Ответить
      • Очевидно эту функцию сделали для усложнения решения проблемы остановки.
        Ответить
    • Сейчас смотрю на этот код и думаю "блять какого хуя", написан он был мной, когда я еще понятия не имел как работает функция и что такое рекурсия, меня просто прикололо что рекурсия пребивает нахер питон и я сразу понял что это говнокод.
      Ответить
      • А ты хотел чтобы она прибивала всю систему?
        Ответить
      • Совестно теперь, что код этот в день тот далёкий запостили?
        Ответить
        • Совсем нет, ведь на ошибках нужно учиться :3
          Ответить
    • гцц бы соптимизировал до ретурн фолса
      Ответить
      • До return None, имхо.

        Если cycl_[N] для некоторого большого N вернёт True, то cycl_[N-1] вернёт False, а cycl[N-2] вернёт None. Если же cycl_[N] вернёт не True, то cycl_[N-1] вернёт None.

        Т.е. функция в любом случае вернёт None либо повиснет. Но зависание - UB. Поэтому функция вернёт None.
        Ответить
      • Можно даже проще... Заинлайним cycl на один уровень. Мы видим, что независимо от значения cycl(a), условие в if'е будет ложно (False != True и None != True). Поэтому функция вернёт None, а считать cycl(a) бессмысленно (в нём нет побочных действий).
        Ответить
      • Гцц пиздец читер...
        int cycl(int a)
        {
            if (cycl(a) == 1)
                return 42;
            else
                return 100500;
        }
        printf("%d\n", cycl(1));
        main:
            subq    $8, %rsp
            movl    $1, %edi
            call    cycl ; вызовем cycl(1) на всякий случай, выкинем результат
            movl    $100500, %edx ; и выведем 100500
            movl    $.LC1, %esi
            movl    $1, %edi
            xorl    %eax, %eax
            call    __printf_chk
            xorl    %eax, %eax
            addq    $8, %rsp
            ret
        Т.е. он знал результат, но функцию вызвал на всякий случай. Вдруг она повиснет или стек порвёт...
        Ответить
        • Олсо, то, что на -O3 осталось от самого цикла:
          cycl:
              subq    $8, %rsp
              call    cycl
              movl    $100500, %eax
              addq    $8, %rsp
              ret
          Ответить
      • Таки уломал: http://ideone.com/VJO3dM
        Ответить

    Добавить комментарий