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