Означают ли «индуктивно» и «рекурсивно» очень похожие?
Например, если есть алгоритм, который определяет n-dim вектор путем определения его первых k + 1 компонентов на основе определения его первых k компонентов и инициализируется с первым компонентом, вы бы назвали его работающим рекурсивно или индуктивно? Я использовал «рекурсивно», но сегодня кто-то сказал это «индуктивно».
Ответы:
Нет , но не по причинам, которые дали другие люди. Разница между рекурсией и индукцией не в том, что рекурсия «сверху вниз», а в индукции «снизу вверх». Индукция изоморфна чему-то, что называется «первичной рекурсией», но, в общем, рекурсия строго сильнее, чем индукция .
Различие между сверху вниз и снизу вверх тривиально - любая примитивная рекурсивная программа «сверху вниз» может быть механически преобразована в нечто «снизу вверх». Фактически любое доказательство по индукции можно превратить в рекурсивную программу. В рамках исчисления индуктивных конструкций, если вы хотите доказать, что каждое натуральное число является ненастоящим, вы бы записали его как функцию, которая создает доказательство того, что n является ненастоящим, выполняя рекурсивный вызов для создания доказательства того, что n- 1 обманчиво
Ключевым фактором индукции является то, что вещи определяются в терминах более мелких вещей, и они «достигают дна» после конечного числа шагов. Натуральные числа являются индуктивными, потому что каждый натуральный является либо 0, либо преемником меньшего натурального. Списки являются индуктивными, поскольку каждый список либо пуст, либо может быть разбит («развернут») на элемент и меньший список.
Иногда рекурсивные программы не пишутся с точки зрения меньших вещей, хотя. Например, возьмите эту функцию Collatz:
Эта функция не работает ни сверху вниз, ни снизу вверх и поэтому не является индуктивной по отношению к натуральным числам.
Там может быть приказ относиться к этому индуктивно, но для большинства вещей просто нет пути. Функции над бесконечными потоками - отличный пример. На самом деле, потоки являются прототипом примера «коиндуктивного» типа.
«Практические основы языков программирования» Боба Харпера, доступные бесплатно онлайн, имеют хорошее введение в индуктивный, коиндуктивный и рекурсивный типы.
источник
Для меня это в основном вопрос точки зрения. Если я определяю объекты на основе меньшего, я делаю это индуктивно, так что это снизу вверх. Если я решаю проблему, разбивая ее на более мелкие части, которые решаются таким же образом, я называю это рекурсией, то есть сверху вниз.
(редактировать) PS. Смотрите аналогичный вопрос в нашем отделении по математике: рекурсивное или индуктивное определение . Я цитирую из ответа Карла Маммерта:
Но что более важно:
источник
Нет, они не то же самое. И вы правы (я предполагаю, что об алгоритме вы описываете): это рекурсивное.
Причиной является определение обоих слов, которые вы можете прочитать в словаре или википедии.
Индукция (в предположении «математической индукции») специально предназначена для доказательства того, что все случаи аргумента верны.
Рекурсия, в частности, касается процесса, который, возможно, повторяется каким-то образом в рамках того же процесса.
RE: ответы других людей:
Посмотрев ответы других людей, я могу понять, почему возникает путаница: при определении структур данных, функций и языков некоторые теоретики, кажется, используют «индуктивный» и «рекурсивный» в замешательстве (см. Комментарии к этому вопросу). Я не думаю, что ответ Коппеля (даже с текущими самыми высокими голосами) действительно отражает эту путаницу. Поскольку мы говорим об алгоритме, я бы не сказал, что существуют «индуктивные алгоритмы»; Я думаю, что это ненужная категоризация.
источник