Problème Programmation : Erreur segmentation

Jerem6464 -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Nous voyons en cours actuellement la récursivité, je me suis donc essayé à l'implémenter en Pascal avec FreePascal. J'ai tenté d'implémenter le tri rapide ou QuickSort mais je trouvais toujours à l'execution ce code-ci : erreur de segmentation
après plusieurs recherches, je ne voyais pas où mon algorithme buggait, j'ai donc tenté d'implémenter une fonction plus simple utilisant la récursivité comme la fonction factorielle. Voici mon code :

program factrecursif;

function fact(x:Integer):Integer;
begin
if (x=1) and (x=0) then
fact:=1
else
fact:=x*fact(x-1)
end;

var x:Integer;
begin
writeln('combien?');
readln(x);
writeln(fact(x))
end.

Et la on m'affiche erreur de segmentation alors que je compile très bien. Ne comprenant d'ou venait l'erreur j'ai tenté de le coder en C.

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

int fact(int x)
{
if (x==1 and x==0)
return 1;
else
return x*fact(x-1);
}

int main()
{
int x,resultat;
printf( "combien?\n");
scanf("%d",&x);
resultat=fact(x);
printf(" %d ",resultat);
}

Et la de nouveau pareil erreur de segmentation malgré une compilation encore une fois OK.
Je ne comprend pas ou est le problème que ce soit en Pascal et en C dans mon code...
Pour information, j'utilise Ubuntu 9.04 et je suis sous KDE. Je ne sais pas si cela vient peut etre de la...Je suis assez desespéré^^

Merci de m'eclairer

Jerem6464
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Et la de nouveau pareil erreur de segmentation malgré une compilation encore une fois OK.
Le segfault apparaît que lorsque la compilation est ok puisque c'est une erreur d'exécution ;-))).

if (x==1 and x==0)
C'est OR qu'il faut mettre (|| en C). Un nombre ne peut pas être égal à 0 ET 1 à la fois, donc il y a donc appel infini de fonctions. La pile va donc se remplir jusqu'à provoquer un crash.
Même remarque pour Pascal.

Cdlt
0