Sommaire

Mise en pratique : récursivité

Exercice 1

Afficher avec une fonction récursive tous les nombres entre n et n’ entrés par l’utilisateur.

Exercice 2

Qu’impriment les programmes suivants ?

// programme 1 
void f(int n) 
{ 
    if (n>0){ 
        f (n-3); 
        printf("%3d\n",n); 
        f (n-2); 
    } 
} 
 
int main() 
{ 
    f(6); 
    return 0; 
} 
 
// programme 2 
void f(int n) 
{ 
    if (n>0){ 
        f (n/10-100); 
        printf("%3d\n",n); 
        f (n/5-200); 
    } 
} 
int main() 
{ 
    f (10000); 
    return 0; 
}

Exercice 3

Remplacer les fonctions f(), g(), h() ci-après par des variantes itératives équivalentes (plus ou moins). Comparer dans chaque cas la quantité de mémoire utilisée et le temps de calcul nécessaire pour l’une et l’autre des variantes.

void f(void) 
{ 
    if (getchar() == ’ ’) 
        f (); 
} 
 
void g(int n) 
{ 
    int i; 
    if (n>0){ 
        scanf("%d",&i); 
        g(n-1); 
        printf("%d\n",i); 
    } 
} 
 
int h(int n) 
{ 
    return n<0 ? 0 : (n==0 ? 1 : h(n-1) + h(n-2)); 
}

Exercice 4

Écrire une fonction prenant un argument entier et renvoyant la somme des chiffres décimaux constituant l’argument. Comparer deux variantes de la solution à ce problème, l’une récursive et l’autre itérative. ...