Funzioni ricorsive - Parte 1
Fa parte della sezione Logica e flusso del percorso GDScript di Coddy. Lezione 57 di 78.
Una funzione ricorsiva è una funzione che richiama sé stessa. Ogni chiamata risolve una versione più semplice del problema, finché il problema non è abbastanza semplice da poter ricevere una risposta diretta.
Questa funzione somma i numeri interi da 1 a n:
func sum_to_n(n: int) -> int:
if n == 0: # caso base
return 0
return n + sum_to_n(n - 1) # passo ricorsivoHa due parti:
- Il caso base risponde senza richiamare la funzione: la somma fino a
0è0. - Il passo ricorsivo richiama la funzione con un valore più piccolo,
n - 1, e costruisce la risposta a partire dal risultato.
sum_to_n(3) è 3 + sum_to_n(2), che è 3 + 2 + sum_to_n(1), che è 3 + 2 + 1 + sum_to_n(0). Il caso base restituisce 0 e le chiamate in attesa terminano una alla volta: il risultato è 6.
Ogni passaggio ricorsivo deve avvicinarsi al caso base. Senza un caso base, o con un passaggio come n + 1 che non lo raggiunge mai, la funzione continua a chiamare sé stessa. Godot consente circa 1.000 chiamate annidate e poi arresta il programma con un errore.
Sfida
FacileIl programma legge un numero intero n (0 o più) e chiama count_down(n).
Sotto _ready(), scrivi la funzione ricorsiva count_down con un parametro. Stampa ogni numero dal suo argomento fino a 0, uno per riga. Non usare cicli: la funzione stampa il suo numero e chiama sé stessa con il numero successivo più piccolo.
Per l'input 3, l'output è:
3
2
1
0Provalo tu
extends Node
func _ready():
var n := int(OS.read_string_from_stdin())
count_down(n)
# Scrivi qui sotto la funzione ricorsiva count_down(n)
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Stringhe in dettaglio
Metodi delle stringheRicerca nelle stringheSostituzione e trimDividere e unireRipasso - verifica del nome utente4Dizionari - Parte 2
Dizionari annidatiArray di dizionariUnire dizionariCopiare dizionariRiepilogo - Contatore di frequenza7Enumerazioni
Che cos'è un'enumerazione?Definire un'enumerazioneValori dell'enumerazioneEnumerazioni in MatchRiepilogo - Semaforo10Funzioni avanzate
Restituire più valoriFunzioni lambda - Parte 1Funzioni lambda - Parte 2Ripasso - Ordinamento con lambdaFunzioni ricorsive - Parte 1Funzioni ricorsive - Parte 2Ripasso - Somma di un array annidato13Sistema di gestione dell'inventario
Panoramica del progettoAggiungere un articolo2Decisioni avanzate
Match con variabiliGuardie di matchPattern per arrayPattern per dizionariVerifiche di appartenenzaRiepilogo - Parser di comandi5Applicazione Rubrica
Visualizzare il menuAggiungere un contatto8Gestione dei registri degli studenti
Panoramica del progettoAggiungi studente11Funzioni di ordine superiore
Il metodo mapIl metodo filterIl metodo reduceany e allRipasso - Validatore di emailRipasso - Elaboratore di numeri3Array multidimensionali
Fondamenti degli array 2DAccedere agli elementi di un array 2DCicli annidati con array 2DRipasso - Array 2DArray frastagliatiSchemi comuni con gli array 2DRipasso - Tabellone di gioco6Insiemi con i dizionari
Che cos'è un insieme?Il dizionario come insiemeAggiungere e rimuovereUnione e intersezioneDifferenza tra insiemiRiepilogo - Rimuovere i duplicati9Aggregazione avanzata dei dati
Somma dei valoriTrovare minimo e massimoOrdinamento personalizzatoRiepilogo - Ordinatore di dizionariEsercitati da solo: Compilatore GDScript online