"Indutivamente" e "recursivamente" significam muito semelhantes?
Por exemplo, se existe um algoritmo que determina um vetor n-dim determinando seus primeiros componentes k + 1 com base em seus primeiros k componentes que foram determinados e é inicializado com o primeiro componente, você chamaria de trabalho recursivo ou indutivo? Eu tenho usado "recursivamente", mas hoje alguém disse "indutivamente".
Respostas:
Não , mas não pelas razões que outras pessoas deram. A diferença entre recursão e indução não é que a recursão seja "de cima para baixo" e a indução seja "de baixo para cima". A indução é isomórfica para algo chamado "recursão primitiva", mas, em geral, a recursão é estritamente mais poderosa que a indução .
A distinção entre descendente e descendente é trivial - qualquer programa recursivo primitivo "descendente" pode ser mecanicamente convertido em algo "descendente". De fato, qualquer prova por indução pode ser transformada em um programa recursivo. Na estrutura do cálculo das construções indutivas, se você quiser provar que todo número natural é esbelto, você o escreveria como uma função que constrói uma prova de que n é esbelto, fazendo uma chamada recursiva para construir uma prova que n- 1 é enganoso.
O fator-chave da indução é que as coisas são definidas em termos de coisas menores e elas "atingem o fundo do poço" após finitas etapas. Os números naturais são indutivos porque todo natural é 0 ou o sucessor de um natural menor. As listas são indutivas porque todas as listas estão vazias ou podem ser divididas ("desdobradas") em um elemento e em uma lista menor.
Às vezes, programas recursivos não são escritos em termos de coisas menores. Por exemplo, considere esta função da Collatz:
Essa função não é de cima para baixo nem de baixo para cima e, portanto, não é indutiva sobre os números naturais.
Pode haver uma ordem para tratar isso indutivamente, mas para a maioria das coisas simplesmente não há como. Funções sobre fluxos infinitos são um ótimo exemplo. De fato, os fluxos são o exemplo prototípico de um tipo "coindutor".
O livro "Fundamentos práticos para linguagens de programação", de Bob Harper, disponível on-line gratuitamente, apresenta uma boa introdução aos tipos indutivo, coindutor e recursivo.
fonte
Para mim, é principalmente uma questão de ponto de vista. Se eu definir objetos com base em objetos menores, faço-o indutivamente, de modo que seja de baixo para cima. Se eu resolver um problema, decompondo-o em pedaços menores resolvidos da mesma maneira que chamo de recursão, isso é de cima para baixo.
(editar) PS. Veja uma pergunta semelhante em nosso departamento irmão de Matemática, definição recursiva vs. indutiva . Cito a resposta de Carl Mummert:
Mas mais importante:
fonte
Não, eles não são os mesmos. E você está certo (eu estou assumindo sobre o algoritmo que você está descrevendo): é recursivo.
O motivo é a definição de ambas as palavras, que você pode ler em um dicionário ou Wikipedia.
A indução (assumindo "indução matemática") é especificamente sobre provar que todos os casos de um argumento são verdadeiros.
A recursão é especificamente sobre um processo que talvez esteja sendo repetido de alguma forma no mesmo processo.
RE: respostas de outras pessoas:
Depois de ver as respostas de outras pessoas, entendo por que há confusão: ao definir estruturas de dados, funções e linguagens, alguns teóricos parecem usar 'indutivo' e 'recursivo' de uma maneira confusa (ver comentários a esta pergunta). Não acho que a resposta de Koppel (mesmo com os votos mais altos atualmente) reflita realmente essa confusão. Já que estamos falando de um algoritmo, eu não diria que existem 'algoritmos indutivos'; Eu acho que é uma categorização desnecessária.
fonte