Ir para conteúdo

POWERED BY:

Arquivado

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

Luan Pedro

pequeno esclarecimento

Recommended Posts

pessoal,estou com uma pequena duvida...

 

em relaçao a recursividade!

 

por exemplo,para calcular o fatorial de 3 ele vai colocando na pilha as chamadas,

o que eu quero dizer,quando por exemplo,o valor de n é 1 no algoritmo

int fatorial(int n)
{   
    if(n>0)
    return fatorial(n-1)*n;
    else
    return 1;
}
    
    
    
ele vai fazer a chamada recursiva novamente ,onde n passará a valer 0 e na sequencia essa chamada com n valendo 0 retornará 1 para a chamada anterior e por ai vai.

A questão é: o 0 é colocado na pilha ou nem é colocado,já que a partir dele é parada a chamada recursiva....

a pilha ficaria ...:

1
2
3
ou

0
1
2
3
:huh:

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal,estou com uma pequena duvida...

 

em relaçao a recursividade!

 

por exemplo,para calcular o fatorial de 3 ele vai colocando na pilha as chamadas,

o que eu quero dizer,quando por exemplo,o valor de n é 1 no algoritmo

int fatorial(int n)
{   
    if(n>0)
    return fatorial(n-1)*n;
    else
    return 1;
}
    
    
    
ele vai fazer a chamada recursiva novamente ,onde n passará a valer 0 e na sequencia essa chamada com n valendo 0 retornará 1 para a chamada anterior e por ai vai.

A questão é: o 0 é colocado na pilha ou nem é colocado,já que a partir dele é parada a chamada recursiva....

a pilha ficaria ...:

1
2
3
ou

0
1
2
3
:huh:

 

na verdade a pilha fica ao contrario...

então se no inicio, o valor de n é 3...

então ele faz 3, 2, 1 e 0

quando o n vale 0, o retorno da função é 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja o código abaixo, está mais explicativo:

 

// Definição recursiva da função fatorial.
unsigned long fatorial( unsigned long number )
{
 	if (number <= 1) // caso base
 	return 1;
 	else // caso recursivo
 	return number * fatorial( number - 1 );
}

Um erro comum em funções recursivas é omitir o caso básico, ou escrever incorretamente a etapa de recursão, de forma que ela não convirja para o caso básico, isso ocasionará uma recursão infinita, o que pode eventualmente esgotar a memória. Isso é análogo ao problema de um laço infinito em uma solução interativa (não-recursiva). A recursão infinita também pode ser causada pelo fornecimento de um dado incorreto de entrada. Qualquer dúvida posta aí... http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

silvio leonel

na verdade a pilha fica ao contrario...

então se no inicio, o valor de n é 3...

então ele faz 3, 2, 1 e 0

quando o n vale 0, o retorno da função é 1

a pilha ficaria ao contrario ??? :mellow: devo ter interpretado mal a sua colocaçao,hehe,

GRAFICAMENTE a pilha ficaria assim certo Clique aqui :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

seu código diz assim:

 if(n>0)
 return fatorial(n-1)*n;
 else
 return 1;

Esta if verifica se n ainda é maior que 0 (zero), ou seja, enquanto n for 1, 2, 3, 4, 5, ... Quando n chegar a zero a função então retorna 1 que é o caso base e primordial para uma chamada recursiva, ele não vai retornar 0, mas sim retornará 1, esta é a ultima coisa que a função retorna ( 1 ).

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.