C/Blocchi e funzioni/Ricorsività: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Pietrodn (discussione | contributi)
Pietrodn (discussione | contributi)
indicizzato
Riga 1:
{{Linguaggio C}}
 
{{IndexItem|ricorsività}}
{{IndexItem|ricorsione}}
 
Visivamente una '''[[Linguaggio C/Blocchi e funzioni/Funzioni|funzione]]''' è '''ricorsiva''' se al suo interno compare un richiamo a se stessa.
Line 5 ⟶ 8:
È possibile scrivere una procedura ricorsiva quando :
 
*Si sta risolvendo un problema con un {{IndexItem|metodo induttivo}}''metodo induttivo''.
*Si sta calcolando una funzione tramite la sua {{IndexItem|definizione induttiva}}''definizione induttiva''
 
Le funzioni ricorsive vengono divise in due parti :
Line 13 ⟶ 16:
*'''Passo della ricorsione'''
 
=={{IndexItem|ricorsione, base}}Base della ricorsione==
Soluzione del problema per la dimensione più piccola per cui è definito
Corrisponde solitamente alla soluzione immediata.
Line 20 ⟶ 23:
*Per il fattoriale il termine minimo è "0! = 1" quindi il primo controllo sarà se il numero è uguale a 0 restituisci il valore 1.
 
=={{IndexItem|ricorsione, passo}}Passo della ricorsione==
Soluzione del problema per una dimensione ''N''esima espresa in termini di soluzione del problema di dimensione più piccola.
 
Line 28 ⟶ 31:
==Esempi==
 
{{IndexItem|fattoriale}}[[w:Fattoriale|Fattoriale]] di un numero (versione non ricorsiva):
 
<code>
Line 48 ⟶ 51:
</code>
 
Algoritmo che genera la {{IndexItem|Fibonacci, succesisone}}successione di [[w:Fibonacci|Fibonacci]]:
 
<code>
Line 59 ⟶ 62:
==Problemi dovuti a errori==
 
Eventuali problemi dovuti a errori di scrittura di un algoritmo potrebbero causare uno [[w:Stack OverFlowOverflow|Stack OverFlowOverflow]], cioè un utilizzo eccessivo della zona di memoria assegnata al programma per essere eseguito.
 
Questo potrebbe provocare una chiusura prematura dell'applicazione.