Red de conocimiento informático - Aprendizaje de programación - tutorial de recursividad de Pascal

tutorial de recursividad de Pascal

La recursividad es un concepto importante en informática. La recursividad es un método eficaz en programación. Los programas escritos mediante recursividad pueden ser concisos y claros.

2.1

El concepto de recursividad

1. Concepto

Se llama directa o indirectamente a su propio procedimiento almacenado (o función). recursión Procedimiento almacenado (o función).

Por ejemplo:

Proceso

a;

Inicio

.

.

.

a;

.

.

.

end;

Este método llama a .NET Framework 2.0 directamente.

Otro ejemplo:

Proceso

b;

Proceso

c;

Iniciar

Iniciar

.

.

.

.

.

.

c;

b;

.

.

.

.

.

.

end;

end;

Esto El método se llama indirectamente.

Ejemplo 1 Calcular n! Las fórmulas recursivas disponibles son las siguientes:

1

cuando

n=0

cuando

fac (n )={n*fac(n-1)

Cuando n>0

El programa se puede escribir de la siguiente manera:

Programa

fac2;

var

n:entero;

función

fac(n:entero):real;

comenzar

si

n=0

entonces

fac:= 1

si no

fac:=n*fac(n-1)

fin;

comenzar

escribir('n=');readln( n);

comenzar

write('n=');readln(n);

p>

writeln('fac(',n,' )=',fac(n):6:0);

end.

Ejemplo 2

Las escaleras tienen n escalones. Puedes subir. escaleras en un escalón o en dos escalones, así que escriba un programa para calcular de cuántas maneras diferentes se pueden subir las escaleras****.

Supongamos que el número de formas de dar n pasos es f(n)

Obviamente hay

1

n=1

f(n)={2

n=2

f(n-1)+f(n-2)

n>2

Programable:

El programa es el siguiente.

Programa

louti;

var

n: entero;

función

f(x: entero) :entero;

comenzar

si

x=1

entonces

f:=1 p>

si no

si

x=2

entonces

f:=2

else

f:=f(x-1)+f(x-2);

fin;

comenzar

escribir(' n= ');leer(n);

escribirn('f(',n,')=',f(n))

fin.

2.2

Cómo diseñar un algoritmo recursivo

1 Determinar la fórmula recursiva

2 Determinar la condición de límite (final)

Ejercicio:

p>

Usa la recursividad para completar los siguientes problemas

1. Encuentra el número máximo en la matriz

2. n enteros

4. Encuentra el promedio de n enteros

5 Encuentra el máximo común divisor y el mínimo común múltiplo de n números naturales.

6. un par de conejos macho y hembra, y crían una pareja cada dos meses. Después de n meses****, ¿cuántas parejas de conejos hay en total?

7. Dada la secuencia dada 1,1,2,4,7,13,24,44,... encuentra los n términos de la secuencia

.

2.3 Ejemplos típicos

Ejemplo 3

Problema de Fanta

Como se muestra en la figura: hay tres agujas, cada una con 1, 2, 3 significa que se colocan n tableros en el pin 1, de pequeño a grande. Ahora necesitamos mover todas las placas

de la aguja No. 1 a la aguja No. 3. La regla de movimiento es: use la aguja No. 2 como aguja de paso, solo mueva una placa a la vez, y mueva cada aguja a la aguja número 3, moviendo cada aguja a la aguja número dos.

No se puede presionar el tablero grande sobre el tablero pequeño. Encuentra el programa con la menor cantidad de movimientos.

Programa:

Programa

fanta

var

n:integer;

procedimiento

move(n,a,b,c:integer);

comenzar

if

n:integer;

No es un problema.if

n=1

entonces

writeln(a,'--->',c )

else

comenzar

move(n-1,a,c,b);

escribirn(a,'- -->',c);

mover(n-1,b,a,c);

fin;

fin;

comenzar

escribir('Entrar

n=');

leer(n);

mover(n, 1,2,3);

end.

Ejemplo 4

Clasificación rápida

La idea de clasificación rápida es: Primero comience con los datos Seleccione un elemento en la secuencia, luego coloque todos los elementos en la secuencia que sean más pequeños que ese elemento a su derecha o izquierda, y luego use el mismo método para los lados izquierdo y derecho hasta que la longitud de cada secuencia a procesar es 1,

Procesamiento completado.

Programa:

Programa

kspv

const

n=7; p>tipo

arr=matriz[1...n]

de

entero;

var

a:arr;

i:integer;

procedimiento

quicksort(var

b:arr;

s,t:entero);

var

i,j,x,t1: entero

comenzar

i:=s;j:=t;x:=b[i];

repetir

mientras

(b[j]>=x)

y

(j>i)

hacer

j:=j-1

si;

j>i

luego

comenzar

t1:=b[i];

b[ i]:=b[j];b[j]:=t1;end;

mientras

(b[i]<=x)

y

(i

hacer

i:=i+1;

si

i

entonces

comienzo

t1:=b[j];b[j]:=b[i];b[i]: =t1;

fin

hasta

i=j;

b[i]:=x;

i:=i+1;j:=j-1;

si

s

entonces

ordenación rápida (b,s,j);

si

i

entonces

quicksort(b,i,t);

fin;

comenzar

escribir('entrada

datos:');

para p>

i:=1

a

n

hacer

leer(a[i]);

escribir(a[i]);

escribir;

quicksort(a,1,n);

escribir(' salida

datos:');

para