LINUX.ORG.RU

рекурсия и итерация

 итерация,


1

3

Приветствую всех.
Вопрос мой довольно праздный, и возможно кому-то покажется бесполезным. Тем не менее. Не кажется ли вам, что то что сейчас понимается под этими 2 терминами несколько не соответствует действительности. Вот что я имею в виду. У нас есть рекурсивный процесс, он интуитивно понятен на примерах трельяжа, стихотворения «у попа была собака» и пр. В программировании он может быть выражен 2-мя способами: с помощью итерациии и с помощью того, что принято называть рекурсией
На концептуальном уровне, это, безусловно, неверно, поскольку мы имеем 1 процесс и 2 способа его реализации, и называть способ реализации процесса самим процессом не совсем правильно. Таким образом, я хочу сказать, что выражение «рекурсивная реализация алгоритма» значит то же, что «рекурсивная реализация рекурсивного алгоритма» - бессмысленный набор слов, и, при этом, сама реализация, собственно не имеет ничего общего с рекурсией
Хотелось бы попросить воздержаться от постов вроде «Ты не знаешь язык X и математическую теорию Y, поэтому ты чмо». Если то, что я написал кажется вам глупостью, просто проходите мимо.
Итак, ваши мнения, Господа.

Ответ на: комментарий от anonimous

На хрена вывод типа, если есть контекст.

ИМХО это фильтрует огромное количество глупых ошибок/опечаток. А в каком-нить пыхпыхе оно само всё сконвертит куда угодно, и потом будешь удивляться, как сумма 3х лестниц с 2я дорогами даёт 17 облаков и 3х лошадок. В сишечке нельзя складывать лестницы с дорогами в любом контексте.

emulek
()
Ответ на: комментарий от emulek

В сишечке нельзя складывать лестницы с дорогами в любом контексте.

4.2. Кастуешь их обоих к голубям и складываешь.

ilammy ★★★
()
Ответ на: комментарий от emulek

В сишечке нельзя складывать лестницы с дорогами в любом контексте.

2+2.0 - сложение целого с вещественным. И не надо подводить под одно понятие динамическую и слабую типизацию. Сильная типизация в динамических языках как раз и нужна, чтобы не складывать 3 лестницы с 2я дорогами.

iVS ★★★★★
()
Последнее исправление: iVS (всего исправлений: 1)
Ответ на: комментарий от emulek

тоже самое, на самом деле.

Нет не то же самое. Ты просто не знаешь форта.

anonymous
()
Ответ на: комментарий от emulek

Но для работы со стеком есть специальные команды и регистры. (sp,bp), позволяющие намного ускорить типичные операции стека

Нет. Всмысле команды есть - но ничего они не ускорят, тем более «намного».

anonymous
()
Ответ на: комментарий от emulek

это если у тебя рукожопие.

Чтобы сишка не стала телегой придется реализовать тот же сборщик мусора.

anonymous
()
Ответ на: комментарий от emulek

Доступ к стеку несколько быстрее потому, что он всегда в кеше, но важно то, что освобождение/выделение памяти стека практически мгновенно, по сравнению с любым GC.

Память в стеке выделяется точно так же, как в перемещающем GC.

anonymous
()
Ответ на: комментарий от emulek

п1 это хорошо, но что плохо, эти переменные не разруливаются GC. Невозможно вернуть в пул то, чего там никогда не было. А регистров/стека там никогда не было. Потому в сишке нельзя сделать «полноценный» GC. Это плата за наличие быстрых переменных, которые в регистрах и/или в самой быстрой памяти (в стеке, для некоторых CPU).

Ты ведь просто не понимаешь как работают сборщики мусора, да? Им совершенно похер где у тебя что лежит - в регистрах, на стеке, в хипе.

anonymous
()
Ответ на: комментарий от anonymous

А ты забываешь про jit, который сам по себе не бесплатен и оправдывает себя не всегда. И да, llvm, пара плагинчиков для clang'а и соответствующий рантайм и будет у тебя ЛЮБОЙ GC. Вот только невостребован он в С и даже в С++, там немного другой подход к разработке - в Си в каждом проекте свой подход, в С++ - тоже, хотя и большинству проектов хватает подсчета ссылок(иногда вместе с детектором циклов) - shared_ptr и weak_ptr, в отличие от сборщиков, это позволяет хотя бы ресурсы различные вовремя отдавать и без всяких костыликов вроде finally.

anonymous
()
Ответ на: комментарий от anonymous

А ты забываешь про jit

Джит никак не связан со сборщиком мусора.

И да, llvm, пара плагинчиков для clang'а и соответствующий рантайм и будет у тебя ЛЮБОЙ GC.

Не будет.

anonymous
()
Ответ на: комментарий от ilammy

4.2. Кастуешь их обоих к голубям и складываешь.

для быдлокодера любой ЯП годен

emulek
()
Ответ на: комментарий от iVS

2+2.0 - сложение целого с вещественным.

и что тут такого страшного? Это сложение вещественного и вещественного.

И не надо подводить под одно понятие динамическую и слабую типизацию.

типизация в сишечке не слабая, целое число без потерь преобразуется в вещественное. Целое — частный случай вещественного.

Сильная типизация в динамических языках как раз и нужна, чтобы не складывать 3 лестницы с 2я дорогами.

угу, потому-что если дорога выглядит как лестница, крякает как лестница, то это лестница. Т.ч. пишем к дороге метод view() и kru(), как в лестнице, и она становится лестницей. С которой мы и складываем другие лестницы, получая облака и крякающих лошадок.

А потом все рассказываем, какое C/C++ говно, потому-что там так нельзя. А типизация слабая, ибо число 2 является вещественным в контексте вещественных чисел. А почему не так-то? Разве теперь множество вещественных чисел уже не включает целые?

emulek
()
Ответ на: комментарий от emulek

Разве теперь множество вещественных чисел уже не включает целые?

Не включает и никогда не включало. Целые числа - это классы эквивалентностей пар натуральных, вещественные числа - классы эквивалентностей фундаментальных последовательностей пар классов эквивалентностей троек натуральных.

anonymous
()
Ответ на: комментарий от anonymous

Всмысле команды есть - но ничего они не ускорят, тем более «намного».

тогда представь мне аналоги команд push/pop и call/ret, и я проверю скорость работы твоих аналогов. Ну например для x86, 32 бита.

emulek
()
Ответ на: комментарий от emulek

Также, как (a*a - b*b) !== (a-b)*(a+b)

Хотя это и тождество, но равенство и эквивалентность тут обеспечивается исключительно в фантазиях математиков. Компьютер выдаёт разный результат(проверь).

λ> cat test3.c 
#include <stdio.h>

int main(int argc, char** argv)
{
  int a = 30, b = 20;

  printf("%d, %d\n", (a*a - b*b), (a-b)*(a+b));

  return 0;
}
λ> gcc test3.c && ./a.out
500, 500
Deleted
()
Ответ на: комментарий от anonymous

Чтобы сишка не стала телегой придется реализовать тот же сборщик мусора.

лови:

uint8_t *pool = NULL;
uint8_t *pool_ptr = NULL;

void super_init()
{
  pool = malloc(1048576U*1048576U);
  pool_ptr = pool;
}

void *super_malloc(size_t s)
{
  uint8_t *r = pool_ptr;
  pool_ptr += s;
  return (void*)r;
}

void super_free(void*){}

emulek
()
Ответ на: комментарий от anonymous

узнай — какая проблема. А то если я скажу, опять начнёте матом ругаться.

emulek
()
Ответ на: комментарий от anonymous

Память в стеке выделяется точно так же, как в перемещающем GC.

а затраты времени на перемещение в перемещающем GC ты конечно не считаешь, да? Он у тебя с помощью магии перемещает? REP MOVS для дебилов, да?

emulek
()
Ответ на: комментарий от anonymous

Ты ведь просто не понимаешь как работают сборщики мусора, да? Им совершенно похер где у тебя что лежит - в регистрах, на стеке, в хипе.

не понимаю. Объясни. Желательно с примером.

emulek
()
Ответ на: комментарий от anonymous

Не включает и никогда не включало. Целые числа - это классы эквивалентностей пар натуральных, вещественные числа - классы эквивалентностей фундаментальных последовательностей пар классов эквивалентностей троек натуральных.

у вас на Марсе другая арифметика? Перевод на земной язык будет?

И да, как вы там на Марсе обходитесь без единицы в своих вещественных числах? Соотношение e^{i \pi} + 1 = 0 не работает?

emulek
()
Ответ на: комментарий от emulek

Заебись, а когда память закончится, то что делать?

anonymous
()
Ответ на: комментарий от emulek

Что тебе объяснить? иди и прочитай любой алгоритм сборки.

anonymous
()
Ответ на: комментарий от emulek

у вас на Марсе другая арифметика?

При чем тут Марс?

Перевод на земной язык будет?

Оно и было на земном, русском языке. Классическое определение целых и вещественных чисел. Обычно это все на первом курсе матфака проходят.

И да, как вы там на Марсе обходитесь без единицы в своих вещественных числах?

Там есть единица. Эта последовательность, эквивалентная 1, 1, 1, ...

Соотношение e^{i \pi} + 1 = 0 не работает?

Это соотношение как раз и задается в вещественных. Точнее - в комплексных. Единица и ноль тут комплексные, а никакие целые.

anonymous
()
Ответ на: комментарий от Deleted

Ебанашка, ты зачем же пытаешься говорить о том, в чем не смыслишь? Теория чисел занимается целыми числами. И, да, это один из самых сложных разделов математики, на первом курсе его никто не проходит, потому что нужна нехуевая база из алгебры, топологии, матана, функана, комплексного анализа и т.д. чтобы просто понимать о чем идет речь.

anonymous
()
Ответ на: комментарий от anonymous

Теория чисел занимается целыми числами.

Да, с разделом я ошибся. И тем не менее, на некоторых специальностях это проходят на первом курсе, как и основы теории чисел.

Deleted
()
Ответ на: комментарий от Deleted

Определения целых/рациональных/вещественных обычно проходят на первой-второй лекции матана. Но ты этих определений не знаешь.

как и основы теории чисел.

основы теории чисел, которые можно проходить на первом курсе, имеют примерно такое же отношение к теории чисел как арифметика к гомологической алгебре.

anonymous
()
Ответ на: комментарий от anonymous

Определения целых/рациональных/вещественных обычно проходят на первой-второй лекции матана.

Причем тут матан? Алгебраические структуры проходят в курсе высшей алгебры. А определения дают даже в сельской школе.

основы теории чисел, которые можно проходить на первом курсе, имеют примерно такое же отношение к теории чисел как арифметика к гомологической алгебре.

Нет.

Deleted
()
Ответ на: комментарий от anonymous

При чем тут перемещение, если речь велась о выделении памяти?

*, а когда память закончится, то что делать?

эти посты писали разные люди, или один идиот?

emulek
()
Ответ на: комментарий от Deleted

Нахрена вам вообще это красование знанием терминов математики. Лари Уолл, гуманитарий, спроектировал ЯП, Джордж Буш джуниор с ай кью меньше средней домохозяйки стал президентом. А вам что поанонировать на терминологию хочется? Какой толк от ваших матанов, если в жизни другие вещи рулят? Задротство?

anonymous
()
Ответ на: комментарий от Deleted

Ну и чо криптграфия? Чо криптографы короли мира чтоли? Если бы математика давала ощутимый профит, математики были бы особой кастой брахманов давно уже. А жизнь этого не подтверждает какбэ. Зато подтверждает, что чем математик умней, чем больше шансов закончить в дурдоме.

anonymous
()
Ответ на: комментарий от anonymous

Это соотношение как раз и задается в вещественных. Точнее - в комплексных. Единица и ноль тут комплексные, а никакие целые.

вот в этом и фишка. На самом деле, int и float — это никакие не вещественные и не целые числа. Это просто модели представления ЧИСЕЛ(вообще) внутри компьютера. Int НЕ эквивалентно целым, а float НЕ эквивалентно вещественным. Мало того, эквивалентного множества нет, и быть не может. Хотя-бы потому, что любое счётное множество бесконечно, и любое множество в компьютере конечно, и стало быть счётным в математическом смысле быть НЕ может.

Таким образом, все твои отсылки к множествам чисел оставь при себе. Я рад, что ты на первом курсе какого-то заборостроительного института учился, но меня расстраивает, что твоё образование этим первым курсом и окончилось.

Если тебе интересно продолжить своё образование, то знай: множество int полностью и однозначно преобразуется в множество double, т.к. в большинстве архитектур на сегодня множество int имеет 4294967296 элементов, и в множестве double КАЖДОМУ из этих эл-тов можно найти ОДНОЗНАЧНОЕ отображение. В силу того, что мантисса double является КОНЕЧНЫМ(sic!) множеством из 4503599627370496 эл-тов. Кроме мантиссы есть конечно ещё и 11 бит порядка, но в данном случае он не имеет значения, т.к. его величина однозначно следует из исходного целого числа, и составляет целую часть логарифма по осн. 2 из данного числа(с учётом смещения).

Таким образом, множество int полностью и однозначно отображается в множество double. И потому, преобразование int->double имеет смысл, и правомерно.

Ты же пытаешься подменить числа int какими-то «целыми числами», которые ты изучал на единственном известном тебе первом курсе какого-то заборостроительного института(ты его хоть закончил?)

emulek
()
Ответ на: комментарий от anonymous

Лари Уолл, гуманитарий, спроектировал ЯП

который никому не нужен, и в сраном говне.

Джордж Буш джуниор с ай кью меньше средней домохозяйки стал президентом.

страны, которая просрала все свои ништяки, и никому не нужна, и в сраном говне.

Какой толк от ваших матанов, если в жизни другие вещи рулят?

просрать то, что тебе досталось бесплатно?

emulek
()
Ответ на: комментарий от anonymous

Если бы математика давала ощутимый профит, математики были бы особой кастой брахманов давно уже. А жизнь этого не подтверждает какбэ.

подтверждает. Миром правят математики. КаГБэ.

Зато подтверждает, что чем математик умней, чем больше шансов закончить в дурдоме.

тебе это не грозит.

emulek
()
Ответ на: комментарий от emulek

который никому не нужен, и в сраном говне.

Извини меня, всему свое время, посмотрим как сраный пистон/пых продержит монополию в вебе 10 лет. Уже в начале слили

росрать то, что тебе досталось бесплатно?

Бесплатно ничего не бывает - ты теряшь время и силы. И кормишь дядей профессоров. Без таких дурачков они были бы не нужны.

anonymous
()
Ответ на: комментарий от emulek

страны, которая просрала все свои ништяки, и никому не нужна, и в сраном говне.

Ага, толстожопый нигер сейчас поперхнулся гамбургером, на который ты ему заработал. А на оборуну за год они тратят столько же сколько мы за 10. Путин лает из-за кустов, а караван идет на восток.

anonymous
()
Ответ на: комментарий от anonymous

Извини меня, всему свое время, посмотрим как сраный пистон/пых продержит монополию в вебе 10 лет. Уже в начале слили

ты не с тем споришь. Я разве защищал когда-то пых/пистон? Наоборот, я всегда считал эти ЯП чем-то вроде sed, годных разве на то, что-бы написать какую-то поделку на злобу дня. Если мне заплатят денег за замену в тексте слово xyz на zyx, я напишу sed 's/xyz/zyx/g'. Если мне заплатят денег за какую-то хоумпагу, я возьму php, и сделаю это. Говно.

Люди хотят срать.

Тебе жалко? Принцессы тоже какают, относись к этому философски.

Бесплатно ничего не бывает - ты теряшь время и силы. И кормишь дядей профессоров. Без таких дурачков они были бы не нужны.

Это ты правильно сказал. Но нужны были-бы МЫ? А профессорские детки === глупые тупые дойные коровы, которых надо доить, и на которых надо ездить. Потому-что безмозглая скотина. За-то с жирным мясом.

emulek
()
Ответ на: комментарий от anonymous

Ага, толстожопый нигер сейчас поперхнулся гамбургером, на который ты ему заработал.

не. Мой толстожопый о таком не думает, и ЛОР не читает. AFAIK он ваще читать не умеет. Думает, что ему все должны. Да и пусть думает, я не против.

emulek
()
Ответ на: комментарий от anonymous

Теперь ты в правильном ключе рассуждаешь

дык я всегда так рассуждал. Не вижу смысла делать из этого тайну.

Некоторые обиженные на это обижаются, но это не моя проблема. Некоторые неудобства только. Не вижу смысла меняться.

emulek
()
Ответ на: комментарий от emulek

Он не думает и не читает. Ему это нахненужно. Он просто занял деньжонок у всего мира и никогда не отдаст.

anonymous
()
Ответ на: комментарий от anonymous

Он не думает и не читает. Ему это нахненужно. Он просто занял деньжонок у всего мира и никогда не отдаст.

не всё так просто — он должен. Мне — отдаёт. Куда денется с подводной лодки? В этом мире делить на ноль умею только я.

emulek
()
Ответ на: комментарий от emulek

Ну ладно, лично тебе отдаст, остальных поимеет.

anonymous
()
Ответ на: комментарий от Deleted

А определения дают даже в сельской школе.

Для нормального определения вещественных чисел нужно определение предела, е-д формализм. То есть первый семестр матана. На первых лекциях дают обычно через канторовские сечения, чтобы не ждать (до полей частных на алгебре разве что к концу семестра доберутся, да и вещественными числами алгебра не занимается). Если школа без матуклона то таких определений, конечно, не будет, как и нормальных определений целых/рациональных как классов эквивалентностей на парах.

Нет.

Да. И, еще раз, хватит говорить о том, в чем не разбираешься.

anonymous
()
Ответ на: комментарий от emulek

Мало того, эквивалентного множества нет, и быть не может.

Почему же? Может. Классы вычетов - вполне себе int. Если подумать, то можно и для флоатов найти модель. Хотя я уверен, что уже подумали, так что надо только погуглить.

Таким образом, все твои отсылки к множествам чисел оставь при себе.

Вообще-то речь как раз шла про математические множества чисел, так что свои детсадовские рассуждения про мантиссы можешь оставить при себе.

Таким образом, множество int полностью и однозначно отображается в множество double.

Произвольные отображения между множествами обычно никому не интересны. Интересны отображения, сохранающие определенную структуру. Какую структуру сохраняет описанная тобой хуита?

anonymous
()
Ответ на: комментарий от emulek

типизация в сишечке не слабая

Наличие автоматических кастов типов целых чисел и автоматических кастов типов указателей — это черты слабой типизации.

целое число без потерь преобразуется в вещественное

36028801313931392 не представимо в IEEE754-double без потери точности.

ilammy ★★★
()
Последнее исправление: ilammy (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.