Fonction recursive

Perkins Arindal Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,j'ai besoin votre aide sur cette exercice.
ecrire une fonction recursive qui fait la somme des inverses des n premiers
entiers positifs

voici mon travail:

#include<stdio.h>
#include<conio.h>
int x,res;
float somme(int n)
{
int b=1
if(n==1){
return b;
}
else{
return somme(n--,b+1/n)
}
}
void main()
{ scanf(''%d,&x);
res=somme(x);
printf("\n la somme est egale a %d", res);
}

2 réponses

  1. matthoffman Messages postés 404 Date d'inscription   Statut Membre Dernière intervention   47
     
    Bonjour,

    Je ne pense pas que tu aies essayer de compiler ton code dans un premier temps:

    float somme(int n) 

    Voici le prototype de ta fonction somme, alors comment fais tu pour faire un appel a somme avec 2 arguments.

    Il faudrait donc (tu l'auras compris), bouger ton resultat temporaire (avec le b), en 2eme argument.
    Comme ca au fur et a mesure de tes appels tu auras un resultat temporaire, que tu renverras quand n == 1

    Enfin, que je crois que quelqu'un t'avais deja repondu en te donnant la solution, dans ton ancien post.
    0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour

    je ne connais pas le C mais quelque chose comme ça devrait aller

    if(n==1){
    return 1
    }
    else{
    return 1/n+somme(n--)
    }

    bonne suite
    0
    1. matthoffman Messages postés 404 Date d'inscription   Statut Membre Dernière intervention   47
       
      Sauf que la tu petes ta pile, parce que la recursion n'est pas terminale :).

      Neanmoins ta version est correcte.
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Je ne suis pas certain que les optimisations de récursion terminale soit vraiment pris en compte en C.
      En théorie oui, c'est mieux, et quand on fait de la programmation fonctionnelle ça peut avoir de l'importance, mais en C je ne suis pas certain que la pile soit vraiment libérée.
      0