Ir ao conteúdo
  • Cadastre-se
hagtha_lana

Implementando a Recursividade

Recommended Posts

Galera, boa noite! me chamo Luana e estou novamente a frequentar o clubedohardware após um tempinho.

Sou estudante de SI, e estou no 2º semestre, preciso elaborar um trabalho referente a Implementação a recursividade porém não tenho noção do que isso seja. Realizando algumas pesquisas na net vejo que é uma função que permite chamar a si mesma, mas não consegui captar ainda a lógica dela? não entendi a diferença de usar uma função recursiva para um comando de repetição (FOR, WHILE, etc)

quando devo usar uma função recursiva ao invés de um comando de repetição?

qual a diferença?

Alguém pode, por favor me ajudar?

Conto com a colaboração de todos e desde já agradeço!

Ótima: noite para todos e aguardo retorno!

:D

Compartilhar este post


Link para o post
Compartilhar em outros sites
Galera, boa noite! me chamo Luana e estou novamente a frequentar o clubedohardware após um tempinho.

Sou estudante de SI, e estou no 2º semestre, preciso elaborar um trabalho referente a Implementação a recursividade porém não tenho noção do que isso seja. Realizando algumas pesquisas na net vejo que é uma função que permite chamar a si mesma, mas não consegui captar ainda a lógica dela? não entendi a diferença de usar uma função recursiva para um comando de repetição (FOR, WHILE, etc)

quando devo usar uma função recursiva ao invés de um comando de repetição?

qual a diferença?

Alguém pode, por favor me ajudar?

Conto com a colaboração de todos e desde já agradeço!

Ótima: noite para todos e aguardo retorno!

:D

Olá hagtha_lana,

Recursividade e repetição são coisas diferentes.

A recursividade consiste resumidamente em um procedimento chamar a si mesmo, ou seja, exatamente da mesmo forma que se tivesse chamando um outro procedimento qualquer, a diferença é que "esse outro procedimento" seria um clone do atual. Sacou? Por exemplo, se tivéssemos um procedimento chamado Fatorial(), ao si chamar, seria como se existisse outro procedimento com o nome Fatorial2(), que é um clone do anterior... se Fatorial2() chamara si mesmo, teria outro clone Fatorial3()...

Assim como normalmente ocorre, ao chamar um procedimento qualquer, o programa vai "entrar" nesse procedimento, e ao terminar, vai voltar exatamente no ponto onde ele foi chamado. Uma característica especial no uso de recursividade é que ao usar parâmetro por valor (sem o var), cada procedimento vai usar o valor recebido sem influência no valor original. Daí, ao efetuar alguma mudança e chamar novamente a si mesmo, o próximo procedimento terá novos valores próprios, que não interagem com o valor que foi passado.

Em fim, a minha sugestão é que você pegue códigos na internet e tente entender o funcionamento...

Exemplo..

var n:integer;
procedure hanoi(n:integer;a,b,c:char);
{mova n discos do pino a para o pino b usando o pino c como auxiliar}
begin
if n=1 then
writeln('mova o disco ',n,' do pino ',a,' para o pino ',
else
begin
hanoi(n-1,a,c,;
writeln('mova o disco ',n,' do pino ',a,' para o pino ',;
hanoi(n-1,c,b,a)
end
end;
BEGIN
write ('Informa a quantidade de discos da torre de Hanoi: ');
readln(n);
hanoi(n,'A','B','C');
readln;
END.

Tente simular os passos que seriam seguidos pelo Pascal utilizando 2 discos... Lembrando que toda vez que um procedimento é chamado, deve ser guardado o valor da variável que está no procedimento atual. Ex.:

Ao chamar o hanoi(n,'A','B','C');, o procedimento terá os valores 2,'A','B','C', correto? Lá no procedimento, if o "n-1" vai dar false, logo vai chamar o procedimento hanoi() (ele mesmo), logo poderíamos chamar de hanoi2()... esse procedimento, terá os valores 1,'A','C','B' (veja que as variáveis estão em outra ordem, e os valores seguiram eles).

Logo, até nesse ponte já teríamos:

PROGRAMA PRINCIPAL

N=2

Fanoi()

N=2, a='A', b='B' e C='C';

Fanoi2()

N=1, a='A', b='C' e C='B';

Por ai vai... daí compare se os valores chegados por essa simulação estão batendo com os gerados com o programa.

Por enquanto, não precisa entender porque

Tá dando para entender? Cada procedimento é como se fosse "um programa"... também conhecido como "sub-programas"... Se chamar outro, cria um novo, se terminar, volta exatamente para o procedimento anterior, e com os respectivos valores... após entender esse funcionamento, ficará mais fácil entender porque está si chamando de duas formas de diferentes dentro dele mesmo...

No aguardo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×