As linguagens de programação modernas disponibilizam estruturas de repetição para o programador.
No entanto, é possível simular qualquer repetição com funções, procedimentos, ou métodos recursivos.
Por isso, esse artigo mostra um exemplo construido com recursividade, sem nenhum comando de repetição. As funções e procedimentos recursivos são chamadas dentro da própria função ou procedimento. Exemplo: O procedimento recursividade é chamado no corpo do próprio procedimento. No entanto, esse procedimento
recursivo gera um loop infinito. Isto é, leva o programa a travar. Por isso, normalmente, as funções ou
procedimentos recursivos têm uma condição de parada para evitar o loop infinito. Por exemplo: como criar um procedimento em pascal que imprime os números de um a um número informado pelo
usuário? Abaixo a solução com comando "for": Abaixo a solução com procedimento recursivo: Perceba que nas duas soluções são necessárias uma variável contador que foi nomeada "i" e uma
condição de parada que é quando o contador "i" torna-se igual ao número "n". Perceba
que na versão recursiva o contador é inicializado com 1 e passado como segundo parâmetro para o procedimento
"imprime_numeros", enquanto que, na versão não recursiva a variável contador é criada no próprio procedimento,
necessitando apenas de um número como parâmetro. A variável contador, nas duas soluções, tem seu valor
variado de 1 até o numero "n". Perceba também que o procedimento recursivo recebe um parâmetro
a mais no programa principal. Ou seja, a variavel contador "i" é inicializada com valor 1 no
programa principal. Na função recursiva, o contador "i" é incrementado em 1 quando a função imprime_numeros é chamada
de modo recursivo recebendo o parâmetro "i+1".
Abaixo um programa que fiz inteiramente com recursividade ( Sem nenhuma estrutura de repetição ):
Imagem capturada do programa:
O código fonte escrito em linguagem pascal:
program RECURSIVIDADE ;
uses crt;
type tvetor = array[ 1..100 ] of integer;
procedure imprime_numeros( n : word; i : byte );
begin
if ( i palavra[ length( palavra ) - i + 1 ] ) then
eh := false
else eh_palindromo( palavra, i+1, eh );
end;
end;
function fatorial( n : word ) : word;
begin
if ( n = 1 ) then
fatorial := 1
else fatorial := n * fatorial( n-1 );
end;
function fibo( n : word ) : word;
begin
if ( n = 0 ) or ( n = 1 ) then
fibo := 1
else fibo := fibo( n-1 ) + fibo( n-2 );
end;
procedure imprime_serie_fibo( n : word; i : byte );
begin
if ( i '0' ) and ( op #27 ) then
begin
case op of
'1': begin
write( 'Informe um numero: ' );
readln( num );
writeln;
write( 'Numeros: ' );
imprime_numeros( num, 1 );
readln;
end;
'2': begin
write( 'Informe um numero: ' );
readln( num );
writeln;
write( 'Primos: ' );
imprime_primos( num, 1 );
readln;
end;
'3': begin
write( 'Informe um numero: ' );
readln( num );
writeln;
write( 'Divisores de ',num,': ' );
imprime_divisores( num, 1 );
readln;
end;
'4': begin
write( 'Informe uma palavra: ' );
readln( palavra );
eh_p := true;
eh_palindromo( palavra, 1, eh_p );
writeln;
if ( eh_p ) then
writeln( 'A palavra ',palavra,' eh palindromo' )
else writeln( 'A palavra ',palavra,' nao eh palindromo' );
readln;
end;
'5': begin
write( 'Informe um numero: ' );
readln( num );
fat := fatorial( num );
writeln;
writeln( 'O fatorial de ',num,' eh: ', fat );
readln;
end;
'6': begin
write( 'Informe um número: ' );
readln( num );
writeln;
write( 'Serie fibbonacci: ' );
imprime_serie_fibo( num, 0 );
readln;
end;
'7': begin
sorteia_numeros( vet, VET_MAX, VET_QUANT, 1 );
writeln;
write( 'Numeros sorteados: ' );
imprime_vetor( vet, VET_QUANT, 1 );
ordena( vet, VET_QUANT, 1 );
writeln;
write( 'Numeros ordenados: ' );
imprime_vetor( vet, VET_QUANT, 1 );
readln;
end;
end;
prog_principal;
end;
End;
Begin
prog_principal;
End.
Baixe o código fonte aqui.
Finalizando...
É isso pessoal. Peço que quem tiver gostado, envie um comentário logo abaixo.
Até o próximo
1486
Escrito por:
Ítalo Herbert
Última alteração feita em:
29/10/2024 18:59:06
Tags relacionadas:
recursividade, linguagem, pascal, computador, função, procedimento, recursivo, recursiva, programação
Você também pode gostar:
Projeto ExpLabCurso gratuito de linguagem CProgramação em pascalFunções recursivasFunções
Deixe seu comentário
Nome:
E-Mail:
Comentario: obrigatório
Mostrar na lista de comentários
Código de verificação:
Digite o código: obrigatório
Enviar
Limpar
Comentários postados: Nenhum comentario visível postado até o momento, deixe o seu!
Política de privacidade
Produzido por Ítalo Herbert
0
nível é a classe PainelDesenho. Perceba que a classe
PainelDesenho depende da implementação, isto é, da classe concreta Pintor.
Logo, se quisessemos mudar o desenho de "desenhaQuadrado" para "desenhaCirculo",
seria necessário alterar em PainelDesenho A seguinte linha:
Isto é um problema porque o ideal é não necessitar mexer na classe PainelDesenho
para alterar o desenho a ser mostrado. Dado o problema, vamos ao exemplo que resolve o
problema, respeitando ao princípio da inversão de dependência por criar uma abstração
dos "desenhos":
Assim, se precisarmos alterar o desenho, basta fazer sem depender de alterações na classe
PainelDesenho. Por exemplo, apenas passando para o método "setDesenho" da classe
PainelDesenho o devido desenho que deve ser mostrado, conforme acontece no método
"main" da classe Principal!
Chegamos ao final de mais um artigo. Este foi sobre os princípios S.O.L.I.D.
Até o próximo!
(Oloruntoba, S) - SOLID: os primeiros 5 princípios do design orientado a objeto.
Acessado em: 27/10/2023. Disponível em:
https://www.digitalocean.com/community/conceptual-articles/s-o-l-i-d-the-first-five-principles-of-object-oriented-design-pt
(Dirani, L) - Princípio da Substituição de Liskov (LSP).
Acessado em: 27/10/2023. Disponível em:
https://medium.com/fora-de-assunto/princ%C3%ADpio-da-substitui%C3%A7%C3%A3o-de-liskov-lsp-78628484e97d
(Paixão, J) - O que é SOLID: O guia completo para você entender os 5 princípios da POO.
Acessado em: 27/10/2023. Disponível em:
https://medium.com/desenvolvendo-com-paixao/o-que-%C3%A9-solid-o-guia-completo-para-voc%C3%AA-entender-os-5-princ%C3%ADpios-da-poo-2b937b3fc530
o método main está a instanciação dos decoradores.
Esse código desenha um retângulo, um losango e um círculo, formando uma
figura semelhante a bandeira do Brasil. Veja abaixo o resultado:
Decoradores de desenhos - Bandeira do Brasil
Agora veja o resultado com a pequena alteração abaixo no método "main":
DesenhoDecorator decorator = new TelaDesenho();
decorator = new RetanguloDesenho( decorator, 300, 250, Color.WHITE );
decorator = new CirculoDesenho( decorator, 75, Color.RED );
Decoradores de desenhos - Bandeira do Japão
Abaixo o link de download do código fonte do projeto que desenha uma bandeira.
Link de download:
decorator-exemplo.zip
Após baixar o projeto, você pode compilar se estiver com o JDK. Então, use a linha de comandos
para entrar na pasta base do projeto descompactado e utilize o seguinte comando para compilar:
javac -d bin src/bandeira/desenho/*.java src/bandeira/*.java
Agora para rodar, basta utilizar o seguinte comando:
java -cp bin bandeira.BandeiraMain
Baixe, compile e rode o projeto e experimente adicionar novos decoradores, ou remover
decoradores encadeados ou, mesmo, alterar a ordem das instâncias e teste novamente para
ver que gráfico é gerado!
Finalizando...
Esse é o final de mais um artigo sobre padrões de projeto. Desta vez, o
padrão decorator foi discutido aqui. Espero que tenham
gostado e, até o próximo!
1435
Escrito por:
Ítalo Herbert
Última alteração feita em:
25/10/2024 19:37:57
Tags relacionadas:
decorator, prog, programação, java, padrão, design, patterns,
qualidade, código
Você também pode gostar:
Padrão SingletonDesenhando em JavaPrincípios SOLIDPadrão ObserverDesenho da bandeira do Brasil
Deixe seu comentário
Nome:
E-Mail:
Comentario: obrigatório
Mostrar na lista de comentários
Código de verificação:
Digite o código: obrigatório
Enviar
Limpar
Comentários postados: Nenhum comentario visível postado até o momento, deixe o seu!
Política de privacidade
Produzido por Ítalo Herbert
0