Polmax Posted April 19, 2012 at 08:01 PM Report #450047 Posted April 19, 2012 at 08:01 PM é uma simples função que calcula o factorial mas esta-me a dar um erro nos argumentos não percebi pk int factorial (int a,int fac) { scanf("%d",&a); fac=a*(factorial (a-1,fac)); return fac; } main () { printf("%d",factorial (a,fac)); }
pmg Posted April 19, 2012 at 08:05 PM Report #450049 Posted April 19, 2012 at 08:05 PM Falta-te o include correcto que contem o prototipo das funcoes scanf e printf. A funcao main devolve um int. Para compatibilidade com outros compiladores, deves usar sempre o tipo da funcao na sua definicao: int main() ... Na funcao main, as variaveis a, e fac nao estao definidas. Depois dos erros corrigidos, a definicao da funcao factorial parece-me esquisita ... porque mudas o valor passado como argumento? What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Polmax Posted April 19, 2012 at 08:25 PM Author Report #450052 Posted April 19, 2012 at 08:25 PM o include esta feito só não o escrevi aqui, e sim a main não tem int atrás pensei que não seria preciso. Quanto a ultima pergunta , por exemplo 3! = 3*2*1 =6 eu estava a tentar fazer isso , lia o argumento por exemplo 4 depois fazia 4* recursiva desse argumento -1 etc , agora que vejo , também não tenho um caso de paragem e não sei como o faço o.o .
pmg Posted April 19, 2012 at 08:32 PM Report #450053 Posted April 19, 2012 at 08:32 PM As funcoes recursivas nao tem nada que saber ... So precisas de 2 coisas: a) como parar b) como resolver um problema com base em problema(s) mais pequeno(s). No caso do factorial (ignorando overflows) a) para ao resolver o factorial de 0, e devolve 1 b) para calcular o factorial de N sabendo o factorial de N-1, basta multiplicar os dois. em codigo int factorial(int N) { /* caso a) */ if (N == 0) return 1; /* caso b */ /* calcula factorial de N - 1 */ ... /* multiplica e devolve */ ... } What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Gil Sousa Posted April 20, 2012 at 09:46 AM Report #450115 Posted April 20, 2012 at 09:46 AM é uma simples função que calcula o factorial mas esta-me a dar um erro nos argumentos não percebi pk int factorial (int a,int fac) { scanf("%d",&a); fac=a*(factorial (a-1,fac)); return fac; } main () { printf("%d",factorial (a,fac)); } O teu código tem alguns erros, o factorial de um numero é o seu valor "n" a multiplicar por "n-1" até o valor de n ser 1. Ou seja: int factorial (int a) { if(a == 1) { return 1; } else { return a * factorial(a-1); } } if(a == 1) -> É a condição de saída, sai quando o valor de a é igual a 1. return a * factorial(a-1) -> calcula o factorial, na memoria ficaria algo do género a * (a-1) * ((a-1)-1) * (((a-1)-1)-1)....* 1 Espero ter ajudado. http://sousatg.github.io
Rui Carlos Posted April 20, 2012 at 07:47 PM Report #450281 Posted April 20, 2012 at 07:47 PM é uma simples função que calcula o factorial mas esta-me a dar um erro nos argumentos não percebi pk int factorial (int a,int fac) { scanf("%d",&a); fac=a*(factorial (a-1,fac)); return fac; } main () { printf("%d",factorial (a,fac)); } Para além dos pontos já abordados, dava-te a seguinte recomendação: nunca coloques o scanf (ou outras funções de I/O) no meio de uma função que efectua os cálculos. No caso, o scanf devia estar na main. Rui Carlos Gonçalves
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now