erro falha de segmentação (imagem do núcleo gravada) [RESOLVIDO]

1. erro falha de segmentação (imagem do núcleo gravada) [RESOLVIDO]

bruno silva
brunoarabica

(usa Outra)

Enviado em 11/05/2013 - 03:12h

bom... estava hoje praticando um pouco, pois sou iniciante, de c que me deparei com esse erro gostaria de saber qual ideia que vocês teriam para solucionar eu problema sem mudar muito o programa. agradecido desde já.


#include <stdio.h>
long long int fat (long int n);
int main (void){
long long int numero;
while (1){
scanf ("%Ld", &numero);
if (numero < 0) break;
printf ("o numero fatorial de %Ld e %Ld .\n", numero, fat (numero));
}
return 0;
}
long long int fat (long int n){
n = fat(n)*fat(n-1);
return n;
}


  


2. Re: erro falha de segmentação (imagem do núcleo gravada) [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 11/05/2013 - 08:23h

brunoarabica escreveu:

#include <stdio.h>
long long int fat (long int n);
int main (void){
long long int numero;
while (1){
scanf ("%Ld", &numero);
if (numero < 0) break;
printf ("o numero fatorial de %Ld e %Ld .\n", numero, fat (numero));
}
return 0;
}
long long int fat (long int n){
n = fat(n)*fat(n-1);
return n;
}



Observe que a função while() precisa de um argumento lógico e você colocou um int.
A função main() deve se a última do código, mesmo colocando a assinatura antes.


3. Re: erro falha de segmentação (imagem do núcleo gravada) [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 11/05/2013 - 08:46h

Na verdade o problema está na função fat(). O argumento deve está entre uma condicional:


long long int fat(long long int n){
if(n){
return fat(n-1)*n;
}
else{
return 1;
}
}



4. Re: erro falha de segmentação (imagem do núcleo gravada) [RESOLVIDO]

bruno silva
brunoarabica

(usa Outra)

Enviado em 11/05/2013 - 15:56h

poderia me explicar porque sem o if o ocorre o erro? pois tentei refazer, corrigindo apenas a formula n=fat(n-1)*fat(n-2),considerando que n>1 mas sem o if continua dando o erro!

agradecido desde já!


5. Re: erro falha de segmentação (imagem do núcleo gravada) [RESOLVIDO]

Luis R. C. Silva
luisrcs

(usa Linux Mint)

Enviado em 11/05/2013 - 17:20h

Isso ocorre devido a recursividade. Só vai sair da condicional quando terminar de chamar a função dentro da outra, como um laço. Sem a condicional, esse laço fica perdido e retorna a falha, pois a memória não foi alocada devidamente.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts