Strumenti Utente

Strumenti Sito


Barra laterale

programmazione:c:ricorsione

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 <stdio.h>
 
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]);
}

programmazione/c/ricorsione.txt · Ultima modifica: 18/04/2018 - 15:49 (modifica esterna)