Introducció
Les funcions recursives són aquelles que es criden a si mateixes per resoldre un problema. Aquest tipus de funcions són molt útils per a problemes que es poden dividir en subproblemes més petits del mateix tipus. En aquest tema, aprendrem què són les funcions recursives, com es defineixen en ALGOL, i veurem alguns exemples pràctics.
Conceptes Clau
- Recursivitat: La capacitat d'una funció per cridar-se a si mateixa.
- Cas Base: La condició que atura la recursivitat per evitar un bucle infinit.
- Cas Recursiu: La part de la funció que inclou la crida recursiva.
Definició de Funcions Recursives en ALGOL
En ALGOL, les funcions recursives es defineixen de manera similar a les funcions normals, però inclouen una crida a si mateixes dins del seu cos. És crucial definir un cas base per evitar una recursió infinita.
Estructura Bàsica
procedure RecursiveFunction(parameters);
begin
if (base_condition) then
return base_value;
else
return RecursiveFunction(modified_parameters);
end;Exemple Pràctic: Factorial d'un Nombre
El factorial d'un nombre n (denotat com n!) és el producte de tots els nombres enters positius fins a n. Es pot definir recursivament com:
0! = 1(cas base)n! = n * (n-1)!(cas recursiu)
Implementació en ALGOL
procedure Factorial(n);
begin
if n = 0 then
return 1;
else
return n * Factorial(n - 1);
end;
begin
print(Factorial(5)); // Sortida: 120
end;Explicació del Codi
- Cas Base: Si
nés 0, la funció retorna 1. - Cas Recursiu: Si
nno és 0, la funció retornanmultiplicat pel factorial den-1.
Exemple Pràctic: Seqüència de Fibonacci
La seqüència de Fibonacci és una sèrie de nombres on cada nombre és la suma dels dos anteriors. Es pot definir recursivament com:
F(0) = 0(cas base)F(1) = 1(cas base)F(n) = F(n-1) + F(n-2)(cas recursiu)
Implementació en ALGOL
procedure Fibonacci(n);
begin
if n = 0 then
return 0;
else if n = 1 then
return 1;
else
return Fibonacci(n - 1) + Fibonacci(n - 2);
end;
begin
print(Fibonacci(6)); // Sortida: 8
end;Explicació del Codi
- Cas Base: Si
nés 0, la funció retorna 0. Sinés 1, la funció retorna 1. - Cas Recursiu: Si
nés més gran que 1, la funció retorna la suma deFibonacci(n-1)iFibonacci(n-2).
Exercicis Pràctics
Exercici 1: Suma de Nombres Naturals
Escriu una funció recursiva en ALGOL que calculi la suma dels primers n nombres naturals.
Solució
procedure SumNaturals(n);
begin
if n = 0 then
return 0;
else
return n + SumNaturals(n - 1);
end;
begin
print(SumNaturals(10)); // Sortida: 55
end;Exercici 2: Potència d'un Nombre
Escriu una funció recursiva en ALGOL que calculi a^b (a elevat a la potència b).
Solució
procedure Power(a, b);
begin
if b = 0 then
return 1;
else
return a * Power(a, b - 1);
end;
begin
print(Power(2, 3)); // Sortida: 8
end;Errors Comuns i Consells
- Oblidar el Cas Base: Assegura't sempre de definir un cas base per evitar una recursió infinita.
- Modificació Incorrecta dels Paràmetres: Verifica que els paràmetres es modifiquen correctament en cada crida recursiva per assegurar que la funció convergeix cap al cas base.
- Desbordament de la Pila: La recursivitat excessiva pot causar un desbordament de la pila. Considera utilitzar una solució iterativa si la profunditat de la recursió és massa gran.
Conclusió
Les funcions recursives són una eina poderosa en la programació, especialment per a problemes que es poden dividir en subproblemes més petits. En aquest tema, hem après com definir i utilitzar funcions recursives en ALGOL, i hem vist exemples pràctics com el càlcul del factorial i la seqüència de Fibonacci. Amb la pràctica, la recursivitat es convertirà en una tècnica valuosa en el teu repertori de programació.
Curs de Programació en ALGOL
Mòdul 1: Introducció a ALGOL
Mòdul 2: Sintaxi i Estructura Bàsica
- Estructura del Programa ALGOL
- Variables i Tipus de Dades
- Entrada i Sortida Bàsica
- Operadors i Expressions
Mòdul 3: Estructures de Control
Mòdul 4: Funcions i Procediments
- Definició de Funcions
- Paràmetres de Funció i Valors de Retorn
- Funcions Recursives
- Procediments en ALGOL
Mòdul 5: Estructures de Dades
Mòdul 6: Temes Avançats
Mòdul 7: Aplicacions Pràctiques
- Mètodes Numèrics
- Implementació d'Algorismes
- Construcció d'un Compilador Simple
- Estudis de Cas i Projectes
