¿Cuál es la diferencia entre las funciones recursivas estáticas y las funciones recursivas no estáticas C / C ++?

Una función estática en C es aquella que es local para el archivo fuente donde está definida. Son útiles para evitar colisiones en los nombres de funciones que podrían usarse comúnmente pero con diferentes implementaciones.

Una función no estática es aquella que es visible globalmente, puede usarse como una función externa o declararse en un encabezado y llamarse desde otro archivo fuente.

En C ++ también hay funciones miembro estáticas, que se declaran en una clase y se pueden invocar sin un objeto de la clase dada.

En cuanto a las funciones recursivas, ser estático o no estático no hace la diferencia. Tener variables locales estáticas o no estáticas sí. Una variable local estática es esencialmente una variable global con alcance restringido: vive en el mismo segmento de memoria que las variables globales, fuera del marco de la pila de la función.

Las variables locales no estáticas viven en la pila. Con cada llamada, se crea un nuevo marco de pila y se le asignan variables locales. A medida que la función recursiva se sumerge profundamente en muchas iteraciones, se crean más y más cuadros de pila, agotando el espacio de pila disponible. Cuantas más variables locales (no su recuento, sino el tamaño agregado), más rápido se agota la pila y se produce un desbordamiento de la pila. Para evitar esto, los algoritmos recursivos a menudo se implementan usando un bucle y una pila personalizada asignada en el montón (que es mucho más grande que el espacio de la pila).