Explicación de contenido recursivo

Idea de algoritmo:

La recursividad consiste en dividir un gran problema que no es fácil de implementar en pequeños problemas que son fáciles de implementar. Si el problema de dividir aún no es fácil de resolver, entonces puede continuar dividiendo, y solo cuando el pequeño problema se resuelva fácilmente, el gran problema estará resuelto.

Ejemplo (factorial): si queremos calcular el factorial de 10 ahora, no conocemos el factorial de 10 porque es demasiado grande, pero si conocemos el factorial de 9, conocemos el factorial de 10. Pero no sabemos cuál es el factorial de 9. Pero si conocemos el factorial de 8, también conocemos el factorial de 9 (y así sucesivamente) ... Ahora bien, si desglosamos el problema al factorial de 1, entonces el factorial de 10 será resuelto por nosotros. .

Código:

#include<stdio.h>
int fun(int n)
{
    
    
	if(n==1) return 1;
	else return fun(n-1)*n;
}
int main ()
{
    
    
	int n;
	scanf("%d",&n);
	printf("%d",fun(n));
}

Análisis de código: este es un código recursivo simple (esencialmente una auto-llamada de una función). A continuación, permítanme hablar sobre cómo escribir un código recursivo y cómo se ejecuta el código recursivo.

Método de escritura recursiva:

1. Escribe una función con propósito (toma lo anterior como ejemplo: una función que calcula el factorial).
2. Determine la condición de terminación de la recursividad (tome lo anterior como ejemplo: cuando n es igual a 1, la función devuelve el valor del factorial de 1, lo que significa que el split ha llegado a la pregunta que podemos decir directamente la respuesta, y también se alcanzará en este momento. La condición de terminación de esta recursión).
3. Recursividad recursiva (tome lo anterior como ejemplo: fun (n) = fun (n) * n este es el tipo recursivo recursivo) Personalmente prefiero entender esto como un tipo recursivo de una secuencia de números, con esto La recurrencia de la secuencia de números. Después de conocer el valor de 1, podemos calcular el valor de cualquier número después de 1 siempre que queramos.

Operación recursiva:

Entonces, ¿cómo funciona esta función recursiva en una computadora?
Yo personalmente divido la recursividad en dos partes: una es recursiva y la otra es recursiva. La recursividad es dividir un problema todo el tiempo (este proceso comienza con un gran problema). En cada paso de este proceso, no obtendrá una respuesta. Hasta que la pregunta se divida en preguntas para las que sabemos la respuesta (es decir, cuando la condición de terminación recursiva), comienza el proceso de devolución. Este proceso comienza con preguntas pequeñas y aumenta gradualmente. Devuelva la respuesta (obtendrá una respuesta en cada paso del proceso) hasta que se devuelva la respuesta que necesitamos, luego todo el proceso de recursividad ha terminado.

Ejemplo: suponga que usted es Li Hua y su amigo es Xiao Ming. Ustedes dos están sentados en la misma columna. Están en la primera fila y Xiao Ming está en la última fila. Ahora desea ver la composición en inglés de Xiao Ming, luego debe pasar la solicitud al siguiente nivel (este proceso se llama pasar), cuando la solicitud se pasa a Xiao Ming (condición de terminación recursiva), él hará el texto Sácalo y pásalo al nivel anterior (este proceso se llama retorno) Cuando recibes el texto, todo el proceso termina.

A continuación, déjeme explicarlo en detalle:
primero, primero debemos comprender un concepto brevemente. Pila: cada función tiene su propia pila, que se utiliza para almacenar algunos de los valores de la función. (También escribiré un blog sobre el contenido específico de la pila para explicarlo específicamente)
Supongamos que ahora queremos calcular el factorial de 3, primero se ponen 3 en la pila (pila 1), después de ingresar la función no es una condición de terminación, luego tenemos que ejecutar fun (2) * 3, aquí hay otra llamada de función y se abre una nueva pila (pila 2), y luego 2 se inserta en la pila, y luego tenemos que ejecutar fun (1) * 2, aquí hay otra llamada de función Luego abra una nueva pila (pila 3) y luego empuje 1 en la pila, pero esta vez se ha alcanzado la condición de terminación recursiva, luego la pila 3 devolverá 1, 2 pilas buenas devolverán 2 y la pila 1 devolverá 4. . Desde entonces ha terminado la recursividad y también tenemos la respuesta.

Creo que deberías haber visto otra forma de escribir factorial:

#include<stdio.h>
int main ()
{
    
    
	int n,i,sum=1;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
    
    
		sum*=i;
	}
	printf("%d",sum);
}

De hecho, la idea de este método se llama iteración.
La diferencia entre iteración y recursión es la misma: la
iteración consiste en pasar de pequeños problemas a grandes problemas paso a paso. (La forma de pensar es de abajo hacia arriba)
La recursividad es un desglose paso a paso de grandes problemas en pequeños. (La forma de pensar es de arriba hacia abajo)

Después de aprender la recursividad, todos pueden practicar con este problema:

Xiao Ming va a subir las escaleras ahora. Puede subir un escalón a la vez o dos escalones a la vez. ¿De cuántas maneras hay cuando Xiao Ming llega a n escalones?

responder:

#include<stdio.h>
int fun(int n)
{
    
    
	if(n==1||n==2) return n;
	else return fun(n-1)+fun(n-2);
}
int main ()
{
    
    
	int n;
	scanf("%d",&n);
	printf("%d",fun(n));
}

Supongo que te gusta

Origin blog.csdn.net/ABded/article/details/103552401
Recomendado
Clasificación