INSTITUTO
SUPERIOR PRIVADO DE ANGOLA
ESTRTUTURAS DE DADOS
INFORMÁTICA -3º ANO
PROFESSOR: Samuel Kakumba N’gunga
RECURSÃO
A recursão é uma das práticas mais vulgares na programação e um mecanismo poderoso na resolução de problemas.
DEFINIÇÃO
A
recursão consiste na resolução de um problema utilizando parte do
problema em causa como solução.
Uma solução recorrente subdivide-se em duas partes:
1. Caso Base
-é
a mais elementar solução para aqual se tem uma solução imediata.
2. Caso Indutivo ou Regra
-O caso indutivo ou regra é a generalização da
solução.
Na programação, deparamo-nos com o fenómeno de
recursão quando um procedimento ou função faz chamada a si mesmo.
EXEMPLOS
_______________________________________________________________________________________________________________
1.
Considere o caso para o
cálculo do factorial de um número N. ( n!).
SOLUÇÃO
Passo 1. Identificar
o caso base: Para n = 0 = = > n!=0
Passo 2. Caso
Indutivo: Para n>0 ==> n!= n x
(n-1)!
Eis a implementação da função factorial em Pascal.
Function
factorial (n:
Integer): Integer;
begin
if n =0 then
factorial :=
1
else
factorial :=n *
factorial (n -1)
End;
É interessante ver o fluxo de execução desta função. Para tal faça um clique
neste link. Fluxo
de execunção- Ilustração
________________________________________________________________________________________________________________
2.
Escreva um procedimento
para escrever a sequência dos primeiros n números inteiros 0, 1, 2, 3,
... n.
SOLUÇÃO
Passo 1. Identificar
o caso base: Para n < 0 ==> Terminar
Passo 2. Caso
Indutivo: Para n>=0 ==> write(n) e
recursivamente escrever(n-1)
procedure
sequencia(n:
Integer): Integer;
begin
if n >=0 then
begin
sequencia(n-1);
write(n);
end
End;
____________________________________________________________________________________________________________________
3. Escreva uma função para
determinar a soma dos primeiros n termos de uma sequencia de
numeros naturais. ( Sn=1
+ 2 + 3 + ... + n)
SOLUÇÃO
Passo 1. Indentificar o caso
Base: Para n =1 ==>S1=1;
Passo 2. Caso Indutivo :
Para n >1 ==> Sn =
n + S(n -1) Indutivo
function
soma(n: integer):integer;
begin
if n = 1 then
soma
:=1
else
soma
:= n + soma (n-1)
end;
_____________________________________________________________________________________________________________________
EXERCÍCIOS
1.
determinar o Output do seguinte procedimento.
procedure ida_volta(n: integer);
begin
if n > 0 then
begin
write(n);
ida_volta(n-1);
write(n);
end
end;
2.
A potência de um número n ao expoente K ( nK ),pode
ser determinada da seguinte forma:
caso 1: n0
= 1; para K=0
caso
2: nK
= n * n(K -1)
; para K>0;
Com base nos casos 1 e 2 escreva a função recursiva,
potencia (base:real; expoente: integer): real; em
Pascal.
3.
Dado o procedimento
procedure b(n: integer);
begin
if n > 0 then
begin
b( n div 2);
write(n mod 2);
end
end;
a)
Determinar o Output deste procedimento para n = 9, n=11, n=23.
b) Com base nos resultados da alínea a), atribua um nome mais significativo a
este procedimento.
_____________________________________________________________________________________________________________________==