====== Esempio di ricorsione diretta ====== Autore: **//Santo Patti//** La ricorsione è una filosofia di programmazione molto efficiente ed elegante. Una funzione è ricorsiva se richiama se stessa all'interno del proprio ciclo. Come esempio è data una funzione che stampa su terminale la rappresentazione numerica con base maggiore di 1 e minore di 17 di un qualsiasi intero. #include void int_to_n(int, int, char*); int main(int argc, char *argv[]) { char digit[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; /* digit è un array di cifre che verrano indicizzate per rappresentare il numero in output */ printf("da 655391 binario a:\n"); int_to_n( 655391, 2, &digit[0]); printf(" binario\n"); int_to_n( 655391, 8, &digit[0]); printf(" ottale\n"); int_to_n( 655391, 16, &digit[0]); printf(" esadecimale\n"); } void int_to_n(int numero, int base, char *cifre) /* Questa funzione esegue ricorsivamente la divisione del parametro "numero" per il parametro "base" utilizzando il resto della divisione come indice per stampare il corrispondente. Si ferma quando non è possibile eseguire la divisione. */ { if ((numero == 0) || (base<2) || (base>16)) return; int index=numero % base; /* In questo punto viene richiamata la funzione ricorsivamente. Viene fatta una copia sullo stack di tutti i valori e richiamata la stessa funzione con nuovi parametri. */ int_to_n((numero / base), base, cifre); /* Quando la precedente chiamata ritorna il valore di index viene prelevato dallo stack ed utilizzato dalla printf per indicizzare l'array di caratteri. */ printf("%c", cifre[index]); }