¿"Inductivamente" y "recursivamente" significan muy similares?
Por ejemplo, si hay un algoritmo que determina un vector n-dim mediante la determinación de sus primeros componentes k + 1 en función de que se hayan determinado sus primeros componentes k, y se inicializa con el primer componente, ¿llamaría que funciona recursivamente o inductivamente? He estado usando "recursivamente", pero hoy alguien lo dijo "inductivamente".
Respuestas:
No , pero no por las razones que otras personas han dado. La diferencia entre recursión e inducción no es que la recursión sea "de arriba abajo" y la inducción sea "de abajo hacia arriba". La inducción es isomorfa a algo llamado "recursividad primitiva", pero, en general, la recursión es estrictamente más poderosa que la inducción .
La distinción entre descendente y ascendente es trivial: cualquier programa recursivo primitivo "descendente" puede convertirse mecánicamente en algo "ascendente". De hecho, cualquier prueba por inducción puede convertirse en un programa recursivo. En el marco del cálculo de las construcciones inductivas, si desea probar que cada número natural es froopuloso, lo escribiría como una función que construye una prueba de que n es froopuloso haciendo una llamada recursiva para construir una prueba de que n- 1 es froopuloso.
El factor clave de la inducción es que las cosas se definen en términos de cosas más pequeñas, y "tocan fondo" después de muchos pasos. Los números naturales son inductivos porque cada natural es 0 o el sucesor de un natural más pequeño. Las listas son inductivas porque cada lista está vacía o puede desglosarse ("desplegarse") en un elemento y una lista más pequeña.
Sin embargo, a veces los programas recursivos no se escriben en términos de cosas más pequeñas. Por ejemplo, tome esta función de Collatz:
Esta función no va de arriba hacia abajo ni de abajo hacia arriba, y por lo tanto no es inductiva sobre los números naturales.
Puede haber una orden para tratar eso inductivamente, pero para la mayoría de las cosas simplemente no hay forma. Las funciones sobre flujos infinitos son un gran ejemplo. De hecho, las corrientes son el ejemplo prototípico de un tipo "coinductivo".
"Fundamentos prácticos para lenguajes de programación" de Bob Harper, disponible en línea de forma gratuita, tiene una buena introducción a los tipos inductivos, coinductivos y recursivos.
fuente
Para mí es principalmente una cuestión de punto de vista. Si defino objetos basados en uno más pequeño, lo hago inductivamente, de modo que es de abajo hacia arriba. Si resuelvo un problema dividiéndolo en partes más pequeñas que se resuelven de la misma manera que lo llamo recurrencia, eso es de arriba hacia abajo.
(editar) PS. Vea una pregunta similar en nuestro departamento hermano de Matemáticas, Definición recursiva vs. inductiva . Cito de la respuesta de Carl Mummert:
Pero mas importante:
fuente
No, no son lo mismo. Y tienes razón (estoy asumiendo sobre el algoritmo que estás describiendo): es recursivo.
La razón es la definición de ambas palabras, que puedes leer en un diccionario o Wikipedia.
La inducción (suponiendo 'inducción matemática') se trata específicamente de probar que todos los casos de un argumento son verdaderos.
La recursión es específicamente sobre un proceso que puede repetirse de alguna manera dentro del mismo proceso.
RE: respuestas de otras personas:
Después de ver las respuestas de otras personas, puedo entender por qué hay confusión: al definir estructuras de datos, funciones y lenguajes, algunos teóricos parecen usar 'inductivo' y 'recursivo' de una manera confusa (ver comentarios a esta pregunta). No creo que la respuesta de Koppel (incluso con los votos más altos actuales) realmente refleje esa confusión. Como estamos hablando de un algoritmo, no diría que hay 'algoritmos inductivos'; Creo que es una categorización innecesaria.
fuente