2013-09-03 2 views
1
void printInt(int n){ 
    if(n==1) 
    cout<<1<<" "; 
    else 
    printInt(n-1); 
    cout<<n<<" "; 
    } 

la sortie que je reçois est« print 1 à n » 1 deux fois

1 1 2 3....n 

J'écris les étapes réelles de la fonction sur un morceau de papier, mais je ne suis pas comment il imprime un 1 supplémentaire dans la console (Visual Studio 2010). Cela vient des solutions matérielles passées, donc c'est strictement pour comprendre comment cela fonctionne.

+0

Vous pouvez utiliser 'printInt (-N-)' au lieu de 'printInt (n - 1)' – olevegard

+0

@olevegard Cela ne fonctionnera pas comme prévu, donc je ne pense pas que ce soit un très bon changement. –

+0

Vous devriez apprendre à utiliser un débogueur. –

Répondre

9

vous avez besoin d'accolades:

if(n==1) 
    { 
    cout<<1<<" "; 
    } 
    else 
    { 
    printInt(n-1); 
    cout<<n<<" "; 
    } 

Ou bien le second cout même quand même de lancer n==1. Strictement parlant les accolades autour du premiercout ne sont pas nécessaires, mais je l'aime pour le style dans ce cas. Note de l'éditeur: Ce problème peut être facilement résolu en passant par votre fonction dans un débogueur.

+0

merci, je ne peux pas croire que j'ai oublié de mettre des accolades pour la clause else, je me sens vraiment stupide mais merci pour l'aide :) – gr33kbo1

0

Malheureusement, dans l'indentation C n'est pas utilisé si votre code signifie en effet

void printInt(int n){ 
    if(n==1) 
    cout<<1<<" "; 
    else 
    printInt(n-1); 
    cout<<n<<" "; 
} 

de sorte que le cout << n << " " est en dehors du contrôle.

1

Lorsque vous ne placez pas d'instruction if-else entre accolades, elle exécute uniquement la ligne directement après elle. Donc, dans votre cas, la ligne printInt(n-1); est la seule ligne à l'intérieur de l'instruction else (dans l'oeil du compilateur).

Pour éviter des problèmes comme celui-ci, joignez toute la déclaration accolades:

void printInt(int n){ 
    if(n==1) 
    { 
     cout<<1<<" "; 
    } 
    else 
    { 
     printInt(n-1); 
     cout<<n<<" "; 
    } 
} 
0
void printInt(int n) { 
    if (n > 0) { 
     printInt(n - 1); 
     cout << n << " "; 
    } 
}