Función recursiva-Torre de Hanoi
-
Definición: Llámese a sí mismo directa o indirectamente dentro de la función.
Puntos clave:
Al definir una función recursiva, ¡debe determinar una "condición final"! ! !
Ocasión de uso:
Tratar con algunos problemas particularmente complejos, es difícil de resolver directamente.
Sin embargo, puede haber formas de simplificar este problema (convertirlo en un problema más simple)
-
Utilice Inception para ayudarnos a comprender las funciones recursivas
-
Desventajas de las funciones recursivas: ¡bajo rendimiento! ! !
En el desarrollo real, ¡rara vez se usa!
Utilice la recursividad para resolver el problema de la Torre de Hanoi
-
Torre de Hanoi
Regla: El palo del medio se puede usar como asistente, pero solo se puede mover un palo a la vez, y el palo grande no se puede colocar sobre el pequeño.
Utilice el programa para resolver este problema:
#include <stdio.h>
void hanoi(int n, char pillar_start[], char pillar_mid[], char pillar_end[]) {
if (n == 1) {
printf("从%s移动到%s\n", pillar_start, pillar_end);
return;
}
hanoi(n - 1, pillar_start, pillar_end, pillar_mid);
printf("从%s移动到%s\n", pillar_start, pillar_end);
hanoi(n - 1, pillar_mid, pillar_start, pillar_end);
}
int main(void) {
char name1[] = "A柱";
char name2[] = "B柱";
char name3[] = "C柱";
int n = 3; //盘子数
hanoi(3, name1, name2, name3);
return 0;
}