Problemi nella comprensione della ricorsione semplice in c [duplicato]

0

La mia funzione:

int num(int x) 
{ 
   if(x>0) 
     num(x-1); 
   else 
     return 0; 
   printf("%d",x); 
}

Questa funzione accetta un input x e stampa i numeri da 1 fino a x.Non riesco a capire come funziona, qualcuno può elaborare per favore. Grazie in anticipo!

    
posta user2829775 22.02.2015 - 16:57
fonte

2 risposte

4

Per risolvere questo tipo di cose, spesso è meglio prendere carta e penna e "fingere di essere il computer che esegue il codice".

Quindi, se abbiamo una chiamata di num(4) , questo porterà a:

if (4 > 0)    // Yupp, 4 > 0 
  num(3);     // x - 1 = 3
  if (3 > 0)  // Yupp
    num(2)
    if (2 > 0)
      num(1)
      if (1 > 0)
        num(0)
        if (0 > 0) // Nope
        goto else-part:
        return 0;
      skip else-part
      print(1);
    skip else-part
    print(2);
  skip else-part
  print(3)
  skip else-part
print(4)
    
risposta data 22.02.2015 - 17:05
fonte
3

secondo me, il modo più semplice di avvolgere la tua testa attorno alla ricorsione sta iniziando dalla fine.

In ogni funzione ricorsiva, c'è una condizione di arresto. Nel tuo caso è else return 0; quindi il metodo restituirà 0 se l'argomento è zero o inferiore. È semplice Ora andiamo indietro.

Sappiamo che num(0) restituisce 0 senza fare altro. Quindi ora possiamo capire che cos'è num(1) . num(1) chiamerà num(0) (che restituirà 0 e non farà nient'altro), quindi stamperà x che è 1 . Ora possiamo tornare indietro e guardare num(2) . num(2) chiamerà num(1) , che abbiamo già coperto e quindi stampa 2 , quindi possiamo guardare num(3) ecc.

Quindi per ogni numero% dix, num (x) stamperà semplicemente tutti i numeri da 1 a x .

    
risposta data 22.02.2015 - 17:37
fonte

Leggi altre domande sui tag