Supongamos que llama al procedimiento merge_sort por primera vez con low = 0 y high = n , donde n> 0 . La cláusula if es verdadera, por lo que mid se calcula y merge_sort se llama recursivamente con un nuevo conjunto de valores donde low = low pero high = mid .
Como puede imaginar, eventualmente llegaremos al caso donde bajo es igual a alto . Por ejemplo, cuando low es 0 y high es 1, mid toma el valor 0. Llamaré a este conjunto particular de valores como A. Por lo tanto, la llamada a la función se ve como merge_sort (0,0) . Obviamente, la cláusula if es falsa aquí, por lo que la función regresa. Regresa a donde? Regresa al procedimiento que lo llamó, el procedimiento padre con el conjunto de valores A.
Ahora, su programa recuerda las líneas que se han ejecutado. Como tal, pasamos a la siguiente línea, que es merge_sort (1,1) (línea 8). Esto sigue y sigue para el resto de las funciones de manera similar.
- ¿Cuáles son algunos algoritmos de flujo de red interesantes?
- ¿Estaría de acuerdo en que el aprendizaje profundo es el único algoritmo que rige sobre todos los demás algoritmos en el aprendizaje automático?
- ¿Dar un nombre largo a una variable es una pérdida de memoria? ¿Int qwertyuiop_asdfghjkl_zxcvbnm; int i; tener el mismo efecto en el tiempo de compilación y ejecución?
- Cómo resolver un problema de programación difícil por mi cuenta
- Cómo resolver un problema usando C ++
Si ayuda, puede imaginar que las llamadas recursivas sean un árbol donde cada nodo es llamada de función y sus hijos son funciones dentro del procedimiento padre. Las funciones secundarias de un padre particular se denominan de amplitud. Cada rama de un árbol termina cuando llegamos a un nodo hoja, un nodo que no tiene hijos porque no cumple con la cláusula if.