Recursivité

liljohn27 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Commence par faire quelque chose déjà, on t'aidera à résoudre les problèmes après.
2
liljohn27 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
liljohn27 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
Je comprends bien que je ne peux pas utiliser for mais comment je fais tourner pour afficher chiffre par chiffe ?
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
liljohn27 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
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
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
liljohn27 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
Je suis en java, je crois que c'est la partie java du forum!
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
baladur13 Messages postés 47805 Date d'inscription   Statut Modérateur Dernière intervention   13 688
 
Bonsoir
Le message a été restauré...
https://forums.commentcamarche.net/forum/affich-26696104-recursivite#10
A l'avenir suivre les conseils donnés ci-dessus
0
heyquem Messages postés 759 Date d'inscription   Statut Membre Dernière intervention   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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
liljohn27 Messages postés 26 Date d'inscription   Statut Membre Dernière intervention  
 
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