Rechercher : dans
Par :

[C] Probleme dans cette fonction

Dernière réponse le 16 fév 2007 à 13:34:57 touf_truc, le 15 fév 2007 à 17:07:45 
 Signaler ce message aux modérateurs

Bonsoir;
mystere est une fonction recursive, esque je peux l'ecrire la fonction mystere d'une façon non recurcive?


#include<stdio.h>
long int mystere(int n)
{
if(n==0)
return 2;
else
if(n==1)
return 1;
else
return (2*mystere(n-1)+4*mystere(n-2));
}
main()
{
int n;
do
{
printf("\n Introduire un nombre : ");
scanf("%d",&n);
}
while(n<0);
printf("\n mystere de %d = %ld ",n,mystere(n));
}

Configuration: Windows XP
Firefox 2.0.0.1

Meilleures réponses pour « [C] Probleme dans cette fonction » dans :
Trier un tableau sans utiliser la fonction sort VoirTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle...
Les piles en langage C VoirLes piles Requis I. INTRODUCTION II. Définition III. La construction du prototype d'un élément de la pile IV. Opérations sur les piles A. Initialisation B. Insertion d'un élément dans la pile C. Ôter un élément de la pile D. Affichage...
Générer des nombres aléatoires efficacement avec rand() VoirGénérer des nombres aléatoires efficacement avec rand() Vous avez peut-être remarqué qu'en C, en utilisant la fonction rand() de la bibliothèque standard, vous obtenez des résultats décevants, trop souvent les mêmes. Prenons un exemple, vous...
Langage C++ - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Les classes en langage C++ VoirLa notion d'objet Le langage C est un langage procédural, c'est-à-dire que c'est un langage permettant de définir des données grâce à des variables, et des traitements grâce aux fonctions. L'apport principal du langage C++ par rapport au...

1

mamiemando, le 15 fév 2007 à 17:37:05

C'est bon a deux trois détails près

#include <stdio.h>

long int mystere(unsigned int n)
{
        if (n==0) return 2;
        else if (n==1) return 1;
        return (2*mystere(n-1)+4*mystere(n-2));
}

int main(){
        int n;
        do{
                printf("\nIntroduire un nombre : ");
                scanf("%d",&n);
        }while(n<0);
        printf("mystere de %d = %ld\n",n,mystere((unsigned int)n));
        return 0;
}

En particulier la fonction main doit retourner 0 quand tout va bien (par convention), et on peut préciser un peu les types (utiliser unsigned int autant que posible)

Bonne chance

Répondre à mamiemando

2

touf_truc, le 15 fév 2007 à 17:57:54
  • +1

Non;
on remplace la fonction

long int mystere(unsigned int n)
{
if (n==0) return 2;
else if (n==1) return 1;
return (2*mystere(n-1)+4*mystere(n-2));
}

par une autre fonction non recursive,
ou elle calcul mystere(n) par methode iterative

Répondre à touf_truc

3

mamiemando, le 15 fév 2007 à 18:22:19

Je t'en prie on te regarde :-) Et si tu peux faire apreil avec des suites de fibonacci ça m'intéresse aussi.

Répondre à mamiemando

4

jro-daemon, le 16 fév 2007 à 01:01:06

Salut,
pour les suites de Fibonacci en mode itératif, je propose ce code-ci:

#include<stdio.h>
long fibonacci(unsigned int n)
{
  long fnm2 = 0; //fibonacci de n moins 2.
  long fnm1 = 1; //fibonnaci de n moins 1.
  long fn; //fibonacci de n
  int i;
 if (n <= 1)
 fn = n
 else
 {
  for(i=2;i<=n;i++)
  {
    fn = fnm1 + fnm2;
    fnm2 = fnm1;
    fnm1 = fn;
  }
 }
 return fn;
}

Bon voilou. D'accord, c'est moins naturel que l'algo récursif c'est sûr mais bon, on y arrive.
Cordialement,
Johnny D.

Répondre à jro-daemon

5

mamiemando, le 16 fév 2007 à 01:13:27
  • +1

Ok!

Répondre à mamiemando

6

Char Snipeur, le 16 fév 2007 à 09:50:58

Salut.
C'est clair, qu'il est toujours possible d'écrire une fonction récursive en itératif, après tout, ce n'est qu'une boucle.
La solution itérative est moins élégante, mais elle utilise moins de mémoire pour les grand nombres.
Pour les polynomes de legendre j'avai tester ces deux méthodes, et dans ce cas, l'itérative était en plus beaucoup plus rapide. Salutation !
Char Snipeur

Répondre à Char Snipeur

7

 jro-daemon, le 16 fév 2007 à 13:34:57

Salut,
En fait pour moi, itératif et récursif c'est la même chose. Le tout est de savoir quelle solution adoptée suite au problème auquelle on doit faire face. Le calcul récursif quelquefois en se "répétant" calcule des données qui sont parfois inutiles et qui peuvent coûter en mémoire si les calculs sont éxécutées un grand nombre de fois.
En fait, on dit à peu près la même chose. :-)
Cordialement,
Johnny D.

Répondre à jro-daemon