• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Sion

Ajuda na recursividade

5 mensagens neste tópico

Boas .

preciso de ajuda aqui num promenor do código ao qual ja dei voltas e voltas e nao encontro solução.

O problema e o seguinte este programa devia calcular o factorial de um numero até chegar ao 0 ( factorial é num!=num*(num-1)), usando recursividade mas, estagnei nesta parte da formula, é que o programa nao faz calculo da recursividade mas sim apenas o ('primeiro num a entrar na funcao' * 'esse num -1', e assim sucessivamente ate chegar a 0.

Se puderem dar alguma dica que me possa ajudar, ou apontar alguma parte mal agradecia imenso

Cumps

Código:

#include <stdio.h>
#include <stdlib.h>

int factorial (int num)
{
    int resultado;
    int r;
    int x;
    x=num-1;
    if (num==0)  //condição de paragem
    {
         resultado=num+1;
         printf("resultado por convencao: %d\n",resultado); // um printf a "avisar" caso o num chege a 0
                  
     }
     else
     {
        resultado=num*(num-1);  // formula para suposto calculo de recurssividade
         printf("Factorial = %d\n",resultado); //Vai mostrando o valor a cada passagem para poder controlar que tipo de resultado dá a formula
          factorial(num-1); // aplicacao da recursividade
         
     }
}

main ()
{
     int num;
     printf("Insira o numero ao qual dejesa calcular o factorial\n");
     scanf("%d",&num);
     factorial(num);
     
     
     system("PAUSE");
}
     

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens a fórmula mal. A fórmula correcta é

n! = n * (n-1)!

O último factor é o factorial de (n-1).

Além disso não estás a retornar o resultado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

n! =n

Tens a fórmula mal. A fórmula correcta é

n! = n * (n-1)!

essa e a formula matemática, o C aceita a formula assim?, como é que na formula meto -(n1)!,

O último factor é o factorial de (n-1).

E nessa parte que tou a ter problemas, como é incluo na formula uma forma de ele fazer o factorial de (n-1),  usando a recursividade :/

Além disso não estás a retornar o resultado.

Pois, bem me parecia ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E outro conselho. Funções não devem imprimir nada - a não ser que sejam realmente funções especificas de impressão.

E já agora fica aqui o factorial recursivo em 2 linhas:

int fact(int n) {
  return (n <= 1) ? 1 : n * fact(n - 1);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Consegui resolver o problema :(, que estava na condiçao.

mas a tua resolução e muito mais pequena sem duvida xD

Obrigado pela ajuda a todos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora