Ir ao conteúdo

Implementando a Recursividade


hagtha_lana

Posts recomendados

Postado

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

  • Membro VIP
Postado
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.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!