Fonctions récursives en C
Bonjour chers amis, j'ai un problème pour faire 2 fonctions récursives dont l'une cherche un élément dans un tableau et renvoie vrai s'il est trouvé ou faux sinon et l'autre qui permet de renverser un tableau. J'ai a chaque fois des erreurs de segmentation. Voici mes codes:
Fonction estPresent
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| #include <stdio.h>
#include <stdlib.h>
int N, i, element;
void saisirTableau(int T[], int N){
for (i = 0; i < N; i++)
{
printf("Donnez le nombre %d: ", i+1);
scanf("%d", &T[i]);
}
}
void afficherTableau(int T[], int N){
//int i;
printf("\n\nLes %d nombres saisis sont: \n\n", N);
for (i = 0; i < N; i++)
{
printf("%d, ", T[i]);
}
}
int estPresent(int element, int T[], int N){
typedef enum BOOL {false, true} bool;
bool absent=false, present=true;
int indice=T[0];
if(indice==0) return absent;
if(T[N]==element) return present;
indice++;
return estPresent(element,T,N-1);
}
int main()
{
int T[N];
int element;
printf("Combien de nombres voulez vous saisir? \n ");
scanf("%d", &N);
saisirTableau(T, N);
afficherTableau(T, N);
printf("\n\nDonnez l'élément que vous voulez rechercher dans le tableau: \n");
scanf("%d", &element);
estPresent(element,T,N);
return 0;
} |
Fonction inverserTableau:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
#include <stdio.h>
#include <stdlib.h>
int N, i;
int T[15];
int *debut, *fin;
void saisirTableau(int T[], int N){
for (i = 0; i < N; i++)
{
printf("Donnez le nombre %d: ", i+1);
scanf("%d", &T[i]);
}
}
void afficherTableau(int T[], int N){
printf("Les %d nombres saisis sont: ", N);
for (i = 0; i < N; i++)
{
printf("%d, ", T[i]);
}
}
void inverserTableau(int T[], int N, int *debut, int *fin;)
{
int tampon;
if (*debut < *fin)
{
tampon=T[*debut];
T[*debut]=T[*fin];
T[*fin]=tampon;
inverserTableau(T, N, *debut+1, *fin-1);
}
//}
}
int main()
{
printf("Combien de nombres voulez vous saisir? \n ");
scanf("%d", &N);
saisirTableau(T, N);
afficherTableau(T, N);
printf("\n\nAprès inversion ");
inverserTableau(T, N, &debut, &fin);
afficherTableau(T, N);
return 0;
} |