TP2 : La récursivité

Programming, Math, etc. · exam

TP2 : La récursivité

Exercice n1 :

#include<stdio.h>

int puissance (int n, int p)

{

if(p==0)

return 1;

else

return (n*puissance(n,p-1));

}

main()

{int n,p;

do

{printf("donner la valeur et sa puissance ");

scanf("%d%d",&n,&p);

}while(!(n>0&&p>=0));

printf("\n%d à la puissance %d =%d",n,p,puissance(n,p));

}

Exercice n2 :

#include<stdio.h>

int somme (int n)

{

if(n==1)

return 1;

else

return (n+somme(n-1));

}

main()

{int n;

do

{

printf("donner la valeur de n ");

scanf("%d",&n);

}while(!(n>0));

printf("\nle résultat =%d",somme(n));

}

Page 1

Exercice n3 :

#include<stdio.h>

int fib (int n)

{

if(n==1 ||n==0)

return n;

else

return (fib (n-1)+fib(n-2));

}

main()

{int n;

do

{

printf("donner la valeur de n ");

scanf("%d",&n);

}while(!(n>=0));

printf("\nle résultat =%d",fib(n));

}

Exercice n4 :

//1ére méthode

#include<stdio.h>

int PGCD(int a,int b)

{

if(a==b)

return a;

else

if(a>b)

return (PGCD(a-b, b));

else

return (PGCD(a, b-a));

}

//2ème méthode

int PGCD(int a,int b)

{

if(a%b==0)

return b;

else

return (PGCD(b, a%b));

}

main()

{int a,b;

do

{

printf("donner deux entiers ");

Page 2

scanf("%d%d",&a,&b);

}while(!(a>0&&b>0));

printf("\nle PGCD de %d et %d =%d",a,b,PGCD(a,b));

}

Exercice n5 :

#include<stdio.h>

int ack(int m, int n)

{

if(m==0)

return n+1;

else

if(n==0 )

return(ack(m-1,1));

else

return (ack(m-1,ack(m,n-1)));

}

main()

{

Publicité

int m,n;

do

{

printf("donner les valeurs de m et n");

scanf("%d%d",&m,&n);

}while(!(m>=0&&n>=0));

printf("resultat =%d",ack(m,n));

}

Exercice n6 :

#include<stdio.h>

#include<string.h>

//1ère méthode

int palindrome (char *ch, int i, int n)

{if(i>=n)

return 1;

else

if(ch[i]==ch[n])

return(palindrome(ch,i+1,n-1));

else

return 0;

}

Page 3

main()

{char ch[10];

gets(ch);

if (palindrome(ch,0,strlen(ch)-1)==1)

printf("%s est palindrome",ch);

else

printf("%s n est pas palindrome",ch);

}

//2ème méthode

/int palindrome (char ch, int n)

{if(n<0)

return 1;

else

if(ch[n-1]==ch[strlen(ch)-n])

return(palindrome(ch,n-1));

else

return 0;

}

main()

{char ch[10];

gets(ch);

if (palindrome(ch,strlen(ch))==1)

printf("%s est palindrome",ch);

else

printf("%s n est pas palindrome",ch);

}

*/

Exercice n7 :

/1ere Méthode/

#include<stdio.h>

/affiche début fin/

void affiche(int *t,int i,int n)

{

if(i<=n-1)

{

printf("%d |",t[i]);

affiche(t,i+1,n);

}

}

Page 4

/affiche fin début/

void affiche_fin_debut (int *t,int i,int n)

{

if(i<=n-1)

{affiche_fin_debut(t,i+1,n);

printf("%d |",t[i]);

}

}

main()

{

int t[10],n;

do{

printf("donner la taille du tableau");

scanf("%d",&n);

}while(!(n>0&&n<=10));

for(int i=0;i<n;i++)

{printf("donner une valeur");

scanf("%d",&t[i]);

}

printf("*Affichage du début à la fin\n ");

affiche(t,0,n);

printf("\n*Affichage de la fin au début\n ");

affiche_fin_debut(t,0,n);

}

/2éme Méthode/

#include<stdio.h>

/affiche début fin/

void affiche(int *t,int n)

{

if(n>=1)

{affiche(t,n-1);

printf("%d |",t[n-1]);

}

}

/affiche fin début/

void affiche_fin_debut (int *t, int n)

{

if(n>=1)

Publicité

{

printf("%d |",t[n-1]);

affiche_fin_debut (t,n-1);

}

Page 5

}

main()

{

int t[10],n;

do{

printf("donner la taille du tableau");

scanf("%d",&n);

}while(!(n>0&&n<=10));

for(int i=0;i<n;i++)

{printf("donner une valeur");

scanf("%d",&t[i]);

}

printf("*Affichage du début à la fin\n ");

affiche(t,n);

printf("\n*Affichage de la fin au début\n ");

affiche_fin_debut(t,n);

}

Exercice n8 :

#include<stdio.h>

//Version itérative

int somme (int *t, int n)

{

int s=0,i;

for(i=0;i<n;i++)

{s=s+t[i];

}

return s;

}

void remplir_tab(int t,int n)

{

printf("donnez la taille du tableau\n");

scanf("%d",n);

for(int i=0;i<*n;i++)

{printf("donnez une valeur pour t[%d]",i);

scanf("%d",&t[i]);

}

}

main()

{int t[10],n;

remplir_tab(t,&n);

printf("la somme des elements du tableau = %d ",somme(t,n));

}

Page 6

---------------------------------------------------------------

//Version récursive

#include <stdio.h>

int somme (int *tab, int n)

{

if (n == 1)

return tab[n-1];

else

return tab[n-1]+somme(tab,n-1);

}

main()

{

int i,n,t[4];

do

{

printf("La taille du tableau ");

scanf("%d",&n);

}while(!(n>0&&n<=4));

for(i=0;i<n;i++)

{

printf("donnez une valeur");

scanf("%d",&t[i]);

}

printf ("la somme des elements du tableau %d\n",somme(t,n));

}

//Version récursive : calcule de la somme des valeurs positives dans le

tableau

#include <stdio.h>

int somme (int *tab, int n)

{

if (n < 0)

return 0;

else

if(tab[n]>0)

return tab[n]+somme(tab,n-1);

else

return somme(tab,n-1);

}

main()

{

int i,n,t[4];

Page 7

do

{

printf("La taille du tableau ");

scanf("%d",&n);

}while(!(n>0&&n<=4));

for(i=0;i<n;i++)

{

printf("donnez une valeur");

scanf("%d",&t[i]);

}

Publicité

printf ("la somme des valeurs positives du tableau %d\n",somme(t,n-1));

}

Exercice n9 :

#include <stdio.h>

int maxtab (int *tab, int n,int max)

{

if (n == 1)

return max;

else

if(tab[n-1]>max)

return maxtab(tab,n-1,tab[n-1]);

else

return maxtab(tab,n-1,max);

}

main()

{

int i,n,t[4];

do

{

printf("La taille du tableau ");

scanf("%d",&n);

}while(!(n>0&&n<=4));

for(i=0;i<n;i++)

{

printf("donnez une valeur");

scanf("%d",&t[i]);

}

printf ("la valeur max du tableau %d\n",maxtab(t,n,t[n-1]));

}

Page 8

Exercice n10 :

#include <stdio.h>

int nbOccur (int *tab, int n, int val)

{

if (n ==0)

return 0;

else

if (tab[n-1] == val)

return 1 + nbOccur(tab,n-1,val);

else

return nbOccur(tab,n-1,val);

}

main()

{

int i,n,t[4],laval;

do

{

printf("La taille du tableau ");

scanf("%d",&n);

}while(!(n>0&&n<=4));

for(i=0;i<n;i++)

{

printf("donnez une valeur");

scanf("%d",&t[i]);

}

printf("entrer la valeur\n");

scanf("%d",&laval);

printf ("la valeur %d se repete %d\n",laval, nbOccur(t,n,laval));

}

Page 9

Exercice n11 :

#include<stdio.h>

void inverse(int t[],int d,int f)

{

int temp;

if(d<f)

{

temp = t[d];

t[d]=t[f];

t[f]=temp;

inverse (t,d+1,f-1);

}

}

main()

{

int i,n,t[10];

printf("La taille du tableau ");

scanf("%d",&n);

for(i=0;i<n;i++)

{

printf("t[%d]=",i);

scanf("%d",&t[i]);

}

printf("\nle tableau initial est: \n");

for(i=0;i<n;i++)

{

printf("%d |",t[i]);

}

inverse(t,0,n-1);

printf("\nle tableau inverse est: \n");

for(i=0;i<n;i++)

{

printf("%d |",t[i]);

}

}

Page 10