Recursivité

liljohn27 Messages postés 29 Statut Membre -  
KX Messages postés 19031 Statut Modérateur -
Bonjour,

J'ai un soucis, je suis entrain d'écrire un programme et j'aimerai afficher un entier récupéré au clavier de cette manière: pour par exemple l'entier 3288.
Afficher: 3
2
8
8
Avec une méthode récursive. Quelqu'un pourrait-il m'aider?

4 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Commence par faire quelque chose déjà, on t'aidera à résoudre les problèmes après.
    2
    1. liljohn27 Messages postés 29 Statut Membre
       
      Voici comment j'ai commencé pour mon programme java qui affiche un entier n = 345 en
      3
      4
      5
      import java.util.*;


      public class Recurs{


      static String affiche(int n){

      String entier;
      entier = String.valueOf(n);

      if(n < 10)
      return entier;
      else
      for(int i = 0; i<entier.length(); i++)
      entier = entier.substring(i);
      return entier;

      }




      //Classe principale
      public static void main (String[] args) {

      Scanner scanner = new Scanner(System.in);
      int n = 0;

      System.out.println("Saisir un entier");
      n = scanner.nextInt();

      System.out.println(n);




      }

      }
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Tu ne peux pas faire un seul "scanner.nextInt", il t'en faut autant que tu veux d'entiers qui composent ton nombre !
      De plus, vu que c'est une question de récursivité il faudrait que tu ais des appels récursifs quelque part, or ici tu n'en as aucun, tu utilises une boucles for (qui ne sers à rien) donc c'est itératif !
      0
    3. liljohn27 Messages postés 29 Statut Membre
       
      Je comprends bien que je ne peux pas utiliser for mais comment je fais tourner pour afficher chiffre par chiffe ?
      0
    4. KX Messages postés 19031 Statut Modérateur 3 020
       
      Tu dois faire des appels récursifs, c'est le principe...

      Donc tu dois avoir dans ta méthode affiche(n), un appel à cette même méthode affiche (si tu n'as pas cela alors ta méthode ne peut pas être considéré comme étant récursive)

      public static void affiche(int n) 
      { 
           // ... 
           affiche( ... ); 
           // ... 
      }

      Tu peux regarder pour cela l'algorithme de xefiry
      0
    5. liljohn27 Messages postés 29 Statut Membre
       
      Ah Java!!!!
      J'ai écrit ceci ça ne fonctionne pas.
      //Version récursive
      static int affiche1(int n, int k){

      if(k == 1)
      return n;
      else{
      return affiche1(n / 10, k);
      }

      }

      //Classe principale
      public static void main (String[] args) {

      Scanner scanner = new Scanner(System.in);
      int n = 0;

      System.out.println("Saisir un entier");

      n = scanner.nextInt();
      int k = 3;


      System.out.println("Vous avez saisi");
      affiche1(n, k);
      0
  2. Utilisateur anonyme
     
    Bonjour.

    En quel langage fait-tu celà ?

    Pour l'algo, ça ressemble à ça :

    void affichierEntier (entier x)
    {
    -- si x != 0
    -- {
    ----- afficherEntier( x / 10)
    ----- afficher( x mod 10)
    --}
    }

    "L'homme qu'il faut, là où il ne faut pas, peut faire toute la différence" (Half Life² : G-Man)
    1
    1. liljohn27 Messages postés 29 Statut Membre
       
      Je suis en java, je crois que c'est la partie java du forum!
      0
  3. heyquem Messages postés 808 Statut Membre 131
     
    J'avais écrit une réponse dans cette file qui donnait un code en Python pour permettre de comprendre ce qu'est la récursivité, parce qu'en Python tout est plus simple.

    Mais ça n'a pas dû plaire au modérateur , qui se planque sans rien dire, parce que mon post a été censuré.
    C'est vraiment d'une nullité cette attitude.
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      "C'est vraiment d'une nullité cette attitude."
      Perso je n'ai pas vu ton message, donc je ne sais pas trop pourquoi il a été censuré, mais si tu veux te plaindre va directement les voir au bureau... ici tu parles un peu dans le vide !
      0
  4. heyquem Messages postés 808 Statut Membre 131
     
    En Python 2.7 (4 minutes à écrire):

    def aff(x):
        if x:
            print x[0]
            aff(x[1:])
    
    
    aff(raw_input(' Entrer un nombre : '))


    Hormis le fait que le petit code ci-dessus permet de montrer à quel point le langage Java est grotesque,
    il te permettra peut être aussi de sentir ce que signifie récursivité.
    Comme l'a dit KX, la fonction aff() dans mon code est récursive parce qu'il y a un appel à elle-même dans son corps de définition.
    -1
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      "Hormis le fait que le petit code ci-dessus permet de montrer à quel point le langage Java est grotesque"

      Je ne vois pas en quoi ton code montre que le Java est grotesque !
      D'une part ton script ne répond pas vraiment à la question puisque tu fais une décomposition d'une chaîne de caractères au lieu de décomposer un entier en base (comme xefiry l'avait très bien fait dans son algo).
      D'autre part, la solution Java à ce problème (celle que le prof de lijohn27 attend) n'est pas plus compliqué que celle que tu as proposé. Alors ne vient pas troller un Java vs. Python qui n'a aucun sens pour ce problème aussi simple (et inutile)...
      0
    2. liljohn27 Messages postés 29 Statut Membre
       
      Quel emballement!!!!! Je pensait être sur la partie Java du forum, et je rappelle que j'apprends. Et Depuis prêt d'un mois que je me suis inscrit sur ce forum je pense avoir pas mal évolué en java et je le trouve très vaste et complet.
      0