IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Algorithme non récursif


Sujet :

Caml

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Algorithme non récursif
    Bonsoir j'ai l’algorithme suivant et je doit en écrire une version non récursive néanmoins je débute sur Caml et malgré mes différents essais je n'y parviens pas pourriez vous m'aidez svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let rec v n=match n with 
    	|0->0
    	|_->n-v(v(n-1));;
    merci d'avance

  2. #2
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Tu peux itérer de 0 à n et remplir un vecteur (de type int vect ou int array) avec les valeurs respectives de v.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    d'accord merci mais pour cela je vais devoir faire une sous fonction recursive non ?

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    let v n=match n with
    	|0->0
    	|_->
    	let valeurs = make_vect n 0 in
    	for i = 0 to n do
    		if valeurs.(i) > 0 
    			then valeurs.(i)
    		else
    			let out= i - valeurs.(valeurs.(i-1)) in
    				valeurs.(i)<- out;
    					done;;
    J'ai réaliser l'algorithme suivant mais il me dit que l'vant derniere ligne est de type unit mais est utiliser avec le type int que faire ? svp

  5. #5
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    if ... then ... else ... est une expression.
    Les deux branches (vrai et faux) d'une expression if doivent avoir le même type.
    Or ta branche vrai a le type int, c'est pourquoi Caml attend également le type int pour ta branche faux.

    J'ai colorié en rouge les 2 principales différences :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let v n =
       let a = make_vect (n+1) 0 in
       for i = 1 to n do
          a.(i) <- i - a.(a.(i-1))
       done;
       a.(n);;
    De façon générale il faut examiner les indices des accès aux vecteurs, noter les contraintes qui en découlent (pas d'accès en dehors des limites), et répercuter ces contraintes sur le code.
    Ici nous avons :
    • a.(n) qui impose que a possède n+1 éléments.
    • a.(i-1) qui impose que i >=1.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

Discussions similaires

  1. Non-récursif moins rapide qu'une recursion ?
    Par MonsieurHelmut dans le forum Général Dotnet
    Réponses: 12
    Dernier message: 03/02/2010, 15h28
  2. [algo non récursif] mettre des "trucs" dans des "cases"
    Par Seb.26 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 24/09/2009, 10h59
  3. find non récursif (sans maxdepth)
    Par lennelei dans le forum Solaris
    Réponses: 1
    Dernier message: 19/11/2008, 18h26
  4. FloodFill étendu non récursif
    Par jlf dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 06/06/2005, 20h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo