¿Cómo salir directamente de la recursividad profunda en lugar de saltar capa por capa?
Varios métodos:
1. Lanzar una excepción al final de la recursión e intentar capturar en el nivel superior
2. hilo separado, realice una espera condicional en el hilo principal, notifique cuando finalice la recursividad y luego salga del hilo directamente.
3. setjmp + longjmp son esencialmente lo mismo que las excepciones, pero implementadas en lenguaje C puro
¿Todas estas son ideas fantásticas que generalmente no se utilizan?
Esto requiere algunos trucos, y a un nivel de lenguaje alto no creo que haya una forma universal de hacerlo, ni lo recomiendo.
En principio, cuando se llama a una función, la dirección de retorno se enviará a la pila. De acuerdo con el principio de primero en entrar, primero en salir, debe sacar la dirección de retorno del nivel anterior. por nivel.
También se desaconsejan las excepciones.
Para ser justos,
En este caso, Geto es el más limpio.
Recursividad. Acabo de leer el título.
Quiero saber por qué existe una necesidad tan extraña.
¿Puedes describir el escenario de la aplicación?
¡Supongamos que los estados intermedios de todos los niveles de recursividad pueden ignorarse! Entonces, ¿cuál es el punto de utilizar la recursividad?
¡Si necesitas considerar el estado intermedio recursivo! Entonces, ¿por qué retirarse a la capa más externa?
¡De hecho, se debe evitar la recursividad! ¡Porque la recursividad se puede dividir en bucles! ¡La eficiencia de la recursividad es demasiado baja! Intenta ir a. Si se usa con prudencia, puede ahorrar una gran cantidad de código y simplificar una lógica compleja. La gente dice que los gotos dan miedo, pero nadie ha dicho nunca que haya sucedido algo terrible después de usarlos. Esta pregunta es interesante. He visto a muchos programadores escribir recursividad que no funciona. He visto a muchos programadores escribir recursividad que no funciona. Estoy divagando. ¿Está bien utilizar una variable global para determinar esto? Aunque no me gustan mucho las variables globales. Después de #include, se utilizan dos funciones de biblioteca estándar extrañas: setjmp() y longjmp(). Ambos son saltos no locales, un paso más allá de ir a.