A veces, en entrevistas, puedo usar la recursividad para resolver un problema (como agregar 1a un entero de precisión infinita), o cuando el problema se presenta adecuado para usar la recursividad. A veces, puede deberse simplemente al uso de la recursividad para resolver problemas, por lo que, sin pensar mucho, la recursión se utiliza para resolver el problema.
Sin embargo, ¿cuáles son las consideraciones antes de decidir si es adecuado usar la recursividad para resolver un problema?
Algunos pensamientos que tuve:
Si usamos la recursividad en los datos que se reducen a la mitad cada vez, parece que no es un problema usar la recursividad, ya que todos los datos que pueden caber en 16 GB de RAM, o incluso un disco duro de 8 TB, pueden manejarse por recursión a solo 42 niveles de profundidad. (por lo que no hay desbordamiento de la pila (creo que en algún entorno, la pila puede tener 4000 niveles de profundidad, más de 42, pero al mismo tiempo, también depende de cuántas variables locales tenga, ya que cada pila de llamadas, ocupa más memoria si hay muchas variables locales, y es el tamaño de la memoria, no el nivel, lo que determina el desbordamiento de la pila)).
Si calcula números de Fibonacci utilizando recursividad pura, realmente tiene que preocuparse por la complejidad del tiempo, a menos que guarde en caché los resultados intermedios.
¿Y qué tal agregar 1a un entero de precisión infinita? Tal vez sea discutible, ya que ¿trabajará con números de 3000 dígitos de largo o 4000 dígitos de largo, tan grandes que pueden causar un desbordamiento de la pila? No lo pensé, pero tal vez la respuesta sea no, no deberíamos usar la recursión, sino solo un bucle simple, porque ¿qué pasa si en alguna aplicación, el número realmente necesita ser de 4000 dígitos para verificar si hay alguna? propiedades del número, como si el número es primo o no.
La última pregunta es: ¿cuáles son las consideraciones antes de que pueda decidir utilizar la recursividad para resolver un problema?
1al entero de precisión infinita? Se puede decir, sí, se reducen a problemas más pequeños, pero la recursión pura no es adecuada para ello