Ir ao conteúdo
  • Cadastre-se

Dúvida em um algoritmo de Fatorial


Posts recomendados

Então, esse é o meu algoritmo feito pelo VisualG, ele basicamente faz o Fatorial de um numero. 

----------------------------------------------------------------------------------------------------------------------------

var
F,C, Fatorial : inteiro
inicio
Fatorial <- 1
    Escreva (" Qual Fatorial voce quer? ")
    Leia (F)
    C <- F
    Repita
       Escreva (C)
        Fatorial <- Fatorial*C
       C <- (C - 1)

    Ate (C < 1)
    Escreva (" O Fatorial de ", F , " e igual a ", Fatorial)

fimalgoritmo

 

 
------------------------------------------------------------------------------------------------------------------------------
 
 
 
E foi aí que a minha dúvida surgiu, eu fiz da maneira acima e funcionou. Mas dai, resolvi trocar o " Fatorial <- Fatorial*C " de lugar, assim eu coloquei em baixo do " C <- (C - 1)" somente para ver o que acontece. Além de o Fatorial me devolver zero no resultado, o meu contador vai até zero em vez de ir somente ao 1 e parar. Porque isso acontece? Eu sei gente, é uma dúvida tosca, porém eu queria entender como tudo funciona. Eu sou novato nessa área e comecei a ver algoritmo estruturado no VisualG um tempo desse. Agradeceria muito se alguém me respondesse sem grosseria
 
Obs : A variável C significa um contador.
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
  • Membro VIP

Olá. Vou fazer a minha analise.

 

Creio que seu novo código ficou assim, correto?

    Repita
       Escreva (C)
       C <- (C - 1)
       Fatorial <- Fatorial*C
    Ate (C < 1)

Vamos lá:

Em 03/02/2016 às 00:07, Sr.Hozuki disse:

Além de o Fatorial me devolver zero no resultado...

 

Qual é o último valor de C? 0, resumidamente pois é o primeiro valor que é "<1".

Ao inverter, você estará usando esse 0 na conta, logo resulta em 0. No "coreto", o zero aparece depois da conta e o laço termina!

 

***

 

Em 03/02/2016 às 00:07, Sr.Hozuki disse:

o meu contador vai até zero em vez de ir somente ao 1 e parar.

Aqui tem que analisar com mais calma... na verdade, o contador vai em ambos casos para zero!! Veja, o que está definindo até onde vai é o "ate"... como o "C" vai diminuindo de 1 em 1, o primeiro número <1 é o zero mesmo!

 

***

 

Resumindo: se o algoritmo estiver funcionando corretamente, e você efetuar esse troca de posição, a única coisa que vai mudar é o resultado (calcular errado)

 

Ex.:

F=4

Conta certa daria 4*3*2*1=24

Conta invertida 3*2*1*0=0

 

No aguardo

 

 

 

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
  • Membro VIP

Olá @mario cesar berardo

 

Em 28/02/2016 às 23:01, mario cesar berardo disse:

Galerinha, cálculo de fatorial tem de usar recursividade. A rotina de fatorial tem 2 linhas só.

 

Não necessariamente. Usar recursividade é "UMA" possibilidade de solução, não "A".

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Simon Viegas, obrigado por me corrigir, mas recomendei a solução que eu acho mais elegante, gasta menos memória e processamento. Uma solução não de nível técnico mas de nivel universitário, que eu creio que é como seu professor espera que você resolva esse problema. Calculo de fatorial é um exercício tradicional usado para ensinar recursividade.

Se vocês estão começando a se iniciar no mundo da programação, e pretendem ir a um nível profissional, com OOP e coisas mais,  melhor ir se acostumando com o conceito "recursividade" e outros conceitos universitários de computação e matemática.

 

Abraços.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...
  • Membro VIP

Olá @Harry Francis Bacon.  Faltou inserir algum comentário na postagem... para entendermos melhor qual o contexto do seu código.

 

Sei que a postagem é um pouco antiga, mas vou tentar complementar, já que o tema é interessante:

Em 29/02/2016 às 17:30, mario cesar berardo disse:

@Simon Viegas, obrigado por me corrigir, mas recomendei a solução que eu acho mais elegante, gasta menos memória e processamento. Uma solução não de nível técnico mas de nivel universitário, que eu creio que é como seu professor espera que você resolva esse problema. Calculo de fatorial é um exercício tradicional usado para ensinar recursividade.

Se vocês estão começando a se iniciar no mundo da programação, e pretendem ir a um nível profissional, com OOP e coisas mais,  melhor ir se acostumando com o conceito "recursividade" e outros conceitos universitários de computação e matemática.

 

Abraços.

 

 

Então, eu não tenho certeza, mas acho que é o oposto... ou seja, a recursividade tende a gastar mais memória e gasta mais processamento... (obs.: estou fazendo suposições)... pois pode trabalhar com criação de novas variáveis locais, gerenciamento de pilhas... etc.  Cada vez que um procedimento/função é chamado, seria como se tivesse abrindo um novo "subprograma"...

 

Por acaso encontrei um tópico que fala desse tema:

Abraços

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...