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

Langage Java Discussion :

Fonction Tribonacci sans boucle


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Fonction Tribonacci sans boucle
    Bonjour à tous !
    Je dois réaliser une fonction tribonacci (fibonacci mais la la somme se fait sur 3 termes au lieu de 2). J'ai réussi la fonction mais je dois maintenant faire la même chose sans boucle et sans récurssivité ! Si quelqu'un pouvez m'aider !
    Voici le code de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static int fonctiontribo(int n){
    		int nombre1=0,nombre2=1,nombre3=1,resultat=0;
    		for(int i=0;i<n;i++){
    			resultat = nombre1 + nombre2 +nombre3;
    			nombre1 = nombre2;
    			nombre2 = nombre3;
    			nombre3 = resultat;
    		}
    		return resultat;
    }
    Merci d'avance
    pAnTiNhO

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Sans boucle et sans récursivité ? Cela reviendrait à vouloir rouler en voiture, mais sans le moteur ni les roues

  3. #3
    Membre averti Avatar de Tux++
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    281
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 281
    Points : 379
    Points
    379
    Par défaut
    Bonsoir,


    je suppose que sans boucle, tu veux dire, récursivement.

    Même si c'est un très mauvais exemple pour du récursif mais qui est souvent utilisé en cours.

    Il te faut un cas de base (quand arrêtes-tu la récursion?)
    et la récursion proprement dite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public int Fibo(int n){
            if (n<=1){
                   return n;
            }else{
                   return Fibo(n-1)+Fibo(n-2);
            }
    }
    à toi de l'adapter à ton "tri"bo

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    C'est bien ça le soucis c'est sans boucle et sans récursivité je trouves ça bizarre et surtout infaisable...
    Si le prof nous l'a demandé ça doit être possible ^^ va falloir se creuser les méninges !

  5. #5
    Membre habitué Avatar de titourock
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 156
    Points : 190
    Points
    190
    Par défaut
    Bonjour,

    Cela doit être possible, vu que c'est nöel je n'ai pas le temps de tout détailler mais voilà l'idée en gros :

    J'appellerai f_0, f_1 et f_2 les trois premiers termes de la suite.

    Il faut ici que tu démontres par récurrence que que le n-ieme terme, à savoir f_n, s'écrit a_n*f_0 + b_n*f_1 + c_n*f_2 où a_n, b_n et c_n sont des coefficients dépendants de n...

    Ainsi ça n'est plus qu'une "bête" application numérique et on fait "disparaître" boucles et récursivité...

    Je pense que c'est l'idée, je regarderai plus en détail pour trouver les coefficients mais ça ne doit pas être bien sorcier. Il faut y aller pas-à-pas, regarder les premiers termes, poser une hypothèse de récurrence etc...

    A bientôt

    [EDIT] Autre info, on peut calculer les termes de la suite de Fibonacci, en écrivant sous forme matricielle de la forme Y = AX. Puis en diagonalisant A, on peut calculer facilement les puissances n-iemes de A et donc le n-ieme terme de la suite de Fibonacci. Donc, c'est aussi une piste à explorer...

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 665
    Points
    5 665
    Par défaut
    Hai,

    En cherchant avec Google, on trouve rapidement des références.

    Il existe des formules explicites démontrées donnant la valeur de Tribonacci(n), dont, par exemple

    http://mathworld.wolfram.com/TribonacciNumber.html

    J'ai testé la formule en C, avec des doubles, les résultats sont ok jusqu'à n = 54, contrôlé avec une version récursive, puis ça diverge, divergence due à l'approximation venant des calculs avec des doubles.

    Mais je ne pense pas que votre prof vous demande de démontrer ça, même si c'est en fait assez simple (?).

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    c'est formules utilisent des racines carrées. Or, en informatique, la résolution d'une racine carrée se fait .... récursivement. T'as donc une boucle / récursivité cachée! Bon c'est vrai, ta complexité ne dépend plus de ton nombre n, mais ta complexité devient méchant à estimer.... Car la fonction Math.sqrt ne donne pas se complexité

    Pour ce qui est de la précision des doubles, en java tu as les BifDecimal, qui te font des calculs précis mais qui sont vachement plus compliqués à utiliser....

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 665
    Points
    5 665
    Par défaut
    Jia,
    Citation Envoyé par tchize_ Voir le message
    c'est formules utilisent des racines carrées. Or, en informatique, la résolution d'une racine carrée se fait .... récursivement. T'as donc une boucle / récursivité cachée!
    N'exagérons pas tout de même. Je ne connais aucun programmeur qui dira qu'un calcul est récursif parce qu''il utilise des racines carrées.

    Citation Envoyé par tchize_ Voir le message
    Bon c'est vrai, ta complexité ne dépend plus de ton nombre n, mais ta complexité devient méchant à estimer.... Car la fonction Math.sqrt ne donne pas se complexité
    Dans la formule en question, les racines carrées n'interviennent que comme des constantes. Il suffit de les pré-calculer (ce que j'ai fait, même pour mon petit test ), et la complexité ne pose plus de problème, et devient celle de la fonction pow(x,y), qui ne va pas bien loin.



    Citation Envoyé par tchize_ Voir le message
    Pour ce qui est de la précision des doubles, en java tu as les BifDecimal, qui te font des calculs précis mais qui sont vachement plus compliqués à utiliser....
    Je le sais bien, mais :

    1) j'ai fait le test en C (c'est précisé dans mon message), et certes il existe des biibliothèqyes multi-précision en C, mais :

    2) Je n'avais pas l'intention de calculer des valeurs exactes jusqu'à n = 10000 ou plus, c'était juste pour voir si ça allait

    3) L'utilisation des BigDecimal n'est pas plus compliquée qu'autre chose, il suffit de regarder les docs.

Discussions similaires

  1. fonction sans boucle
    Par goldengear dans le forum Scilab
    Réponses: 5
    Dernier message: 27/04/2013, 19h22
  2. Réponses: 2
    Dernier message: 26/03/2013, 16h48
  3. fonction colon pour cell (sans boucle for)
    Par soft001 dans le forum MATLAB
    Réponses: 1
    Dernier message: 11/09/2011, 13h11
  4. Réponses: 4
    Dernier message: 02/06/2004, 16h35
  5. Appeler une fonction avec/sans parenthèses
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 29/12/2002, 18h48

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