Jump to content

Recommended Posts

Posted

é 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));
}
Posted

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!

Posted

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 .

Posted

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!

Posted

é 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.

Posted

é 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.

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.