tutorial de recursividad de Pascal
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 p>
si
n=0
entonces
fac:= 1
si no p>
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> 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> p> i:=1 a n hacer leer(a[i]); p> escribir(a[i]); escribir; quicksort(a,1,n); escribir(' salida datos:'); para