2.5 Tema de la estructura de datos y el algoritmo recursivo [se actualizará]

Definición recursiva

Una función se llama a sí misma directa o indirectamente

Echemos un vistazo a un párrafo bien escrito.


"Cuando se llama a una función mientras se está ejecutando otra función, el sistema necesita completar tres cosas antes de ejecutar la función llamada:

(1) Pase todos los parámetros reales, la dirección de retorno y otra información a la función llamada para guardar

(2) Asignar área de almacenamiento para variables locales de la función llamada

(3) Transferir el control a la función de llamada de acuerdo con la dirección de retorno guardada por la función llamada

Cuando existen múltiples funciones que constituyen llamadas anidadas, de acuerdo con el principio de llamada después del primer retorno, la transferencia de información y la transferencia de control entre las funciones antes mencionadas deben realizarse a través de la pila, es decir, el sistema ordena los datos. espacio requerido por todo el programa cuando se está ejecutando. En una pila, cada vez que se llama a una función, se asigna un área de almacenamiento en la parte superior de la pila. Cuando una función sale, su área de almacenamiento se libera. El área de datos de la función que se está ejecutando actualmente debe estar en la parte superior de la pila " . ——" Estructura de datos y algoritmo ", Yan Weimin


La oración anterior es adecuada para que la función A llame a la función B, y la función A para llamar a la función A [es decir, recursividad ] es la misma razón

Hay muchas clasificaciones recursivas, que se pueden entender a través de ejemplos.

Algunos ejemplos de recursividad

Ejemplo 1: use la recursividad para encontrar la suma de 1 + 2 + 3 + ...... + 100

#include <stdio.h>

/*递归法求1+2+3+...+100啊*/

int f(int n)
{
	if (n == 1)
		return 1;
	else
		return f(n-1) + n;
}


int main(void)
{
	printf("%d", f(100));
	return 0;
}

Ejemplo 2: Encuentra el factorial (se puede escribir en un bucle o de forma recursiva)

① Encuentra el método factorial por bucle

#include <stdio.h>

/*循环法求阶乘*/

int f(int n)
{
	int fac = 1;
	int i;
	if (n == 0)
		return 0;
	for (i = 1; i <= n; i++)
		fac = fac * i;
	return fac;
}


int main(void)
{
	printf("%d", f(2));
	return 0;
}

② Método recursivo para encontrar factorial

#include <stdio.h>

/*递归法求阶乘啊*/

int f(int n)
{
	if (n == 1)
		return 1;
	else
		return f(n-1)*n;
}


int main(void)
{
	printf("%d", f(4));
	return 0;
}

Ejemplo 3:

Torre de Hanoi

Ejemplo 4:

Camina por el laberinto

 

 

 

 

 

 

 

 

Supongo que te gusta

Origin blog.csdn.net/weixin_43450646/article/details/107480086
Recomendado
Clasificación