• Non ci sono risultati.

Fondamenti di Informatica (Elettronici)

N/A
N/A
Protected

Academic year: 2022

Condividi "Fondamenti di Informatica (Elettronici)"

Copied!
46
0
0

Testo completo

(1)

Fondamenti di Informatica (Elettronici)

THINK JULIA – Capitolo 5 (seconda parte)

25 ottobre 2021

(2)

5. Recursion (parte b)

1

1

Ricorsione

2

Diagrammi di stack per funzioni ricorsive

3

Ricorsione infinita

4

Input da tastiera

5

Debug

6

Glossario

7

Exercizi

1Tratto dahttps://benlauwens.github.io/ThinkJulia.jl/latest/book.html, disponibile sotto Licenza ‘Creative Commons Attribution-NonCommercial 3.0 Unported‘.

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 2 / 30

(3)

Ricorsione

Section 1

Ricorsione

(4)

Ricorsione

Ricorsione

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 4 / 30

(5)

Ricorsione

Lavora magicamente

Èlegaleper una funzionechiamarne un’altra; è anchelegaleche una funzionechiami se stessa.

Potrebbenon essere ovvioil motivo per cui questa è unacosa utile, ma risulta essereuna delle cose più magicheche un programma possa fare.

Ad esempio, guarda la seguente funzione:

function countdown(n) if n <= 0

println(`Blastoff!`) else

print(n, ` `) countdown(n-1) end end

Se “n” èzero oppure negativo, restituisce la parola “Blastoff!” (Lanciato!). Altrimenti,

(6)

Ricorsione

countdown ricorsivo

Cosa succede se chiamiamo questa funzione in questo modo?

julia>

countdown(10)

10 9 8 7 6 5 4 3 2 1

Blastoff!

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 6 / 30

(7)

Ricorsione

Esecuzione passo dopo passo

L’esecuzione di countdown(3) inizia con n = 3, e poiché n è maggiore di 0, restituisce il valore 3, quindi chiama se stessa . . .

L’esecuzione di countdown inizia con n = 2, e poiché n è maggiore di 0, restituisce il valore 2 e quindi chiama se stessa. . .

L’esecuzione di countdown inizia con n = 1, e poiché n è maggiore di 0, restituisce il valore 1 e quindi chiama se stessa. . .

L’esecuzione di countdown inizia con n = 0, e poiché n non è maggiore di 0, restituisce la parola, Blastoff! e poi ritorna.

Il countdown che ha ottenuto n = 1 ritorna.

Il countdown che ha ottenuto n = 2 ritorna.

(8)

Diagrammi di stack per funzioni ricorsive

Section 2

Diagrammi di stack per funzioni ricorsive

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 8 / 30

(9)

Diagrammi di stack per funzioni ricorsive

Diagrammi di stack per funzioni ricorsive

(10)

Diagrammi di stack per funzioni ricorsive

Esempio di esecuzione

In Stack Diagrams, abbiamo utilizzato un* diagramma di stackper rappresentare lostato di un programmadurante unachiamata* di funzione. Lo stesso tipo di diagramma può aiutare a interpretare unafunzione ricorsiva.

Ogni voltache una funzione viene chiamata, Juliacrea un frameper contenere iparametrie le variabili localidella funzione. Per una funzione ricorsiva, potrebbe essercipiù di un framenello stack allo stesso tempo.

{# id .class width

= 25%}

Ildiagramma dello stackmostra lostackper “countdown” chiamatoconn = 3.

Come al solito, laparte superioredello stack è ilframe perMainÈ vuoto perché non abbiamo creato alcuna variabile in “Main” né passato alcun argomento.

Iquattro framedelcountdown hanno valori diversi per il parametro “n”. Il fondo dello stack, dove

n = 0”, è chiamatocaso base. Non effettua una chiamata ricorsiva, quindinon ci sono più frame.

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 10 / 30

(11)

Ricorsione infinita

Section 3

Ricorsione infinita

(12)

Ricorsione infinita

Ricorsione infinita

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 12 / 30

(13)

Ricorsione infinita

Il programma non termina mai

Se una ricorsione non raggiunge mai un caso base, continua a effettuare chiamate ricorsive per sempre e il programma non termina mai.

Questo è noto come ricorsione infinita e generalmente non è una buona mossa.

Ecco un programma minimo con una ricorsione infinita:

function

recurse() recurse()

end

controlla se puoi raggiungere un caso base.

(14)

Ricorsione infinita

Julia error message

Nella maggior parte degli ambienti di programmazione, un programma con ricorsione infinita non viene realmente eseguito per sempre.

Julia segnala un messaggio di errore quando viene raggiunta la profondità massima di ricorsione:

julia>

recurse()

ERROR:

StackOverflowError:

Stacktrace:

[1]

recurse() at ./REPL[1]:2

(repeats

79984

times) Questo stacktrace è un po’ più grande di quello che abbiamo visto nel capitolo precedente. Quando si verifica l’errore, ci sono 80000 frame di ricorsione nello stack!

Se si verifica accidentalmente una ricorsione infinita, rivedere la funzione per confermare che esista un caso base che non effettui una chiamata ricorsiva.

E se c’è un caso base, che poi termini.

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 14 / 30

(15)

Input da tastiera

Section 4

Input da tastiera

(16)

Input da tastiera

Input da tastiera

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 16 / 30

(17)

Input da tastiera

Interazione utente

Iprogrammiche abbiamo scritto finoranon accettanoalcuninputda parte dell’utente. Fanno semplicemente lastessa cosaogni volta.

Julia fornisce unafunzione predefinitachiamatareadline chearresta il programmae attende che l’utente digitiqualcosa. Quando l’utentepreme RETURN o ENTER, ilprogramma riprende, e readlinerestituisceciò che l’utenteha digitatocomestringa.

julia> text = readline() What are you waiting for?

`What are you waiting for?`

Prima di ricevere input dall’utente,è una buona ideastampare unpromptche dica all’utente cosa digitare:

julia> print(`What...is your name? `); readline() What...is your name? Arthur, King of the Britons!

`Arthur, King of the Britons!`

Unpunto e virgola; permette di metterepiù istruzionisullastessa riga. NellaREPLsolo l’ultima

(18)

Input da tastiera

Immettere solo stringhe di cifre

Se ti aspetti che l’utente digitiunnumero intero, puoiprovare a convertireilvalorerestituito in Int64:

julia> println(`What...is the airspeed velocity of an unladen swallow?`);

speed = readline()

What...is the airspeed velocity of an unladen swallow?

42`42`

julia> parse(Int64, speed) 42

Ma se l’utentedigita qualcosadi diverso da unastringa di cifre, viene visualizzato unerrore:

julia> println(`What...is the airspeed velocity of an unladen swallow? `); speed = readline() What...is the airspeed velocity of an unladen swallow?

What do you mean, an African or a European swallow?

`What do you mean, an African or a European swallow?`

julia> parse(Int64, speed)

ERROR: ArgumentError: invalid base 10 digit 'W' in `What do you mean, an African or a European swallow?`

[...]

Vedremo più avanticome gestirequesto tipo dierrore.

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 18 / 30

(19)

Debug

Section 5

Debug

(20)

Debug

Debug

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 20 / 30

(21)

Debug

I messaggi di errore a volte danno un’indicazione sbagliata

Quando si verifica un errore di sintassi o di runtime, il messaggio di errore contiene molte informazioni, ma può essere fuorviante

Le parti più utili sono solitamente: di che tipo di errore si trattava, e dove si è verificato.

Gli errori di sintassi sono generalmente facili da trovare, ma servono alcuni trucchi. In generale, i messaggi di errore indicano dove è stato rilevato il problema, ma l’errore effettivo potrebbe essere precedente nel codice, a volte su una riga precedente.

Lo stesso vale per gli errori di runtime. Supponi di voler calcolare un rapporto segnale / rumore in decibel. La formula è

Psignal

(22)

Debug

Esempio

In Julia, potresti scrivere qualcosa del genere:

signal_power = 9 noise_power = 10

ratio = signal_power ÷ noise_power decibels = 10 * log10(ratio) print(decibels)

E ottieni:

-Inf

Questononèil risultatoche tiaspettavi.

Per trovare l’errore,potrebbe essere utilestampare il valoredel rapporto, che risulta essere 0. Ilproblemaènella riga 3, che utilizza la **divisione intera* invece della divisione in virgola mobile.

Dovrestidedicare del tempoallalettura attentadeimessaggi di errore, manondare per scontatoche tutto ciò che dicono siacorretto.

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 22 / 30

(23)

Glossario

Section 6

Glossario

(24)

Glossario

Glossario

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 24 / 30

(25)

Glossario

Glossario I

divisione intera Operatore, indicato con÷, che divide due numeri e arrotonda per difetto (verso l’infinito negativo) a un numero intero.

operatore modulo Operatore, indicato con un segno di percentuale (%), che funziona su numeri interi e restituisce il resto quando un numero viene diviso per un altro.

espressione booleana Un’espressione il cui valore ètrue o false.

operatore relazionale Uno degli operatori che confronta i suoi operandi: ==, ! =,

>, <, > = E <=.

operatore logico Uno degli operatori che combina espressioni booleane: && (and),

|| (or) e ! (Not).

dichiarazione condizionale Un’istruzione che controlla il flusso di esecuzione a seconda di una condizione.

condizione L’espressione booleana in un’istruzione condizionale che determina quale ramo viene eseguito.

(26)

Glossario

Glossario I

divisione intera Operatore, indicato con÷, che divide due numeri e arrotonda per difetto (verso l’infinito negativo) a un numero intero.

operatore modulo Operatore, indicato con un segno di percentuale (%), che funziona su numeri interi e restituisce il resto quando un numero viene diviso per un altro.

espressione booleana Un’espressione il cui valore ètrue o false.

operatore relazionale Uno degli operatori che confronta i suoi operandi: ==, ! =,

>, <, > = E <=.

operatore logico Uno degli operatori che combina espressioni booleane: && (and),

|| (or) e ! (Not).

dichiarazione condizionale Un’istruzione che controlla il flusso di esecuzione a seconda di una condizione.

condizione L’espressione booleana in un’istruzione condizionale che determina quale ramo viene eseguito.

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 25 / 30

(27)

Glossario

Glossario I

divisione intera Operatore, indicato con÷, che divide due numeri e arrotonda per difetto (verso l’infinito negativo) a un numero intero.

operatore modulo Operatore, indicato con un segno di percentuale (%), che funziona su numeri interi e restituisce il resto quando un numero viene diviso per un altro.

espressione booleana Un’espressione il cui valore ètrue o false.

operatore relazionale Uno degli operatori che confronta i suoi operandi: ==, ! =,

>, <, > = E <=.

operatore logico Uno degli operatori che combina espressioni booleane: && (and),

|| (or) e ! (Not).

dichiarazione condizionale Un’istruzione che controlla il flusso di esecuzione a seconda di una condizione.

condizione L’espressione booleana in un’istruzione condizionale che determina quale ramo viene eseguito.

(28)

Glossario

Glossario I

divisione intera Operatore, indicato con÷, che divide due numeri e arrotonda per difetto (verso l’infinito negativo) a un numero intero.

operatore modulo Operatore, indicato con un segno di percentuale (%), che funziona su numeri interi e restituisce il resto quando un numero viene diviso per un altro.

espressione booleana Un’espressione il cui valore ètrue o false.

operatore relazionale Uno degli operatori che confronta i suoi operandi: ==, ! =,

>, <, > = E <=.

operatore logico Uno degli operatori che combina espressioni booleane: && (and),

|| (or) e ! (Not).

dichiarazione condizionale Un’istruzione che controlla il flusso di esecuzione a seconda di una condizione.

condizione L’espressione booleana in un’istruzione condizionale che determina quale ramo viene eseguito.

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 25 / 30

(29)

Glossario

Glossario I

divisione intera Operatore, indicato con÷, che divide due numeri e arrotonda per difetto (verso l’infinito negativo) a un numero intero.

operatore modulo Operatore, indicato con un segno di percentuale (%), che funziona su numeri interi e restituisce il resto quando un numero viene diviso per un altro.

espressione booleana Un’espressione il cui valore ètrue o false.

operatore relazionale Uno degli operatori che confronta i suoi operandi: ==, ! =,

>, <, > = E <=.

operatore logico Uno degli operatori che combina espressioni booleane: && (and),

|| (or) e ! (Not).

dichiarazione condizionale Un’istruzione che controlla il flusso di esecuzione a seconda di una condizione.

condizione L’espressione booleana in un’istruzione condizionale che determina quale ramo viene eseguito.

(30)

Glossario

Glossario I

divisione intera Operatore, indicato con÷, che divide due numeri e arrotonda per difetto (verso l’infinito negativo) a un numero intero.

operatore modulo Operatore, indicato con un segno di percentuale (%), che funziona su numeri interi e restituisce il resto quando un numero viene diviso per un altro.

espressione booleana Un’espressione il cui valore ètrue o false.

operatore relazionale Uno degli operatori che confronta i suoi operandi: ==, ! =,

>, <, > = E <=.

operatore logico Uno degli operatori che combina espressioni booleane: && (and),

|| (or) e ! (Not).

dichiarazione condizionale Un’istruzione che controlla il flusso di esecuzione a seconda di una condizione.

condizione L’espressione booleana in un’istruzione condizionale che determina quale ramo viene eseguito.

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 25 / 30

(31)

Glossario

Glossario I

divisione intera Operatore, indicato con÷, che divide due numeri e arrotonda per difetto (verso l’infinito negativo) a un numero intero.

operatore modulo Operatore, indicato con un segno di percentuale (%), che funziona su numeri interi e restituisce il resto quando un numero viene diviso per un altro.

espressione booleana Un’espressione il cui valore ètrue o false.

operatore relazionale Uno degli operatori che confronta i suoi operandi: ==, ! =,

>, <, > = E <=.

operatore logico Uno degli operatori che combina espressioni booleane: && (and),

|| (or) e ! (Not).

dichiarazione condizionale Un’istruzione che controlla il flusso di esecuzione a seconda di una condizione.

condizione L’espressione booleana in un’istruzione condizionale che determina quale ramo viene eseguito.

(32)

Glossario

Glossario II

dichiarazione composta Un’istruzione composta da un’intestazione e un corpo. Il corpo termina con la parola chiaveend.

ramo Una delle sequenze alternative di istruzioni in un’istruzione condizionale.

condizionale concatenato Una dichiarazione condizionale con una serie di diramazioni alternative.

condizionale annidato Un’istruzione condizionale che appare in uno dei rami di un’altra istruzione condizionale.

dichiarazione di ritorno Un’istruzione che fa terminare immediatamente una funzione e tornare al chiamante.

ricorsione Il processo di chiamata della funzione attualmente in esecuzione. caso base Un ramo condizionale in una funzione ricorsiva che non effettua una

chiamata ricorsiva.

ricorsione infinita Una ricorsione che non ha un caso di base o non lo raggiunge mai. Alla fine, una ricorsione infinita causa unerrore di runtime.

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 26 / 30

(33)

Glossario

Glossario II

dichiarazione composta Un’istruzione composta da un’intestazione e un corpo. Il corpo termina con la parola chiaveend.

ramo Una delle sequenze alternative di istruzioni in un’istruzione condizionale.

condizionale concatenato Una dichiarazione condizionale con una serie di diramazioni alternative.

condizionale annidato Un’istruzione condizionale che appare in uno dei rami di un’altra istruzione condizionale.

dichiarazione di ritorno Un’istruzione che fa terminare immediatamente una funzione e tornare al chiamante.

ricorsione Il processo di chiamata della funzione attualmente in esecuzione. caso base Un ramo condizionale in una funzione ricorsiva che non effettua una

chiamata ricorsiva.

ricorsione infinita Una ricorsione che non ha un caso di base o non lo raggiunge mai. Alla fine, una ricorsione infinita causa unerrore di runtime.

(34)

Glossario

Glossario II

dichiarazione composta Un’istruzione composta da un’intestazione e un corpo. Il corpo termina con la parola chiaveend.

ramo Una delle sequenze alternative di istruzioni in un’istruzione condizionale.

condizionale concatenato Una dichiarazione condizionale con una serie di diramazioni alternative.

condizionale annidato Un’istruzione condizionale che appare in uno dei rami di un’altra istruzione condizionale.

dichiarazione di ritorno Un’istruzione che fa terminare immediatamente una funzione e tornare al chiamante.

ricorsione Il processo di chiamata della funzione attualmente in esecuzione. caso base Un ramo condizionale in una funzione ricorsiva che non effettua una

chiamata ricorsiva.

ricorsione infinita Una ricorsione che non ha un caso di base o non lo raggiunge mai. Alla fine, una ricorsione infinita causa unerrore di runtime.

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 26 / 30

(35)

Glossario

Glossario II

dichiarazione composta Un’istruzione composta da un’intestazione e un corpo. Il corpo termina con la parola chiaveend.

ramo Una delle sequenze alternative di istruzioni in un’istruzione condizionale.

condizionale concatenato Una dichiarazione condizionale con una serie di diramazioni alternative.

condizionale annidato Un’istruzione condizionale che appare in uno dei rami di un’altra istruzione condizionale.

dichiarazione di ritorno Un’istruzione che fa terminare immediatamente una funzione e tornare al chiamante.

ricorsione Il processo di chiamata della funzione attualmente in esecuzione. caso base Un ramo condizionale in una funzione ricorsiva che non effettua una

chiamata ricorsiva.

ricorsione infinita Una ricorsione che non ha un caso di base o non lo raggiunge mai. Alla fine, una ricorsione infinita causa unerrore di runtime.

(36)

Glossario

Glossario II

dichiarazione composta Un’istruzione composta da un’intestazione e un corpo. Il corpo termina con la parola chiaveend.

ramo Una delle sequenze alternative di istruzioni in un’istruzione condizionale.

condizionale concatenato Una dichiarazione condizionale con una serie di diramazioni alternative.

condizionale annidato Un’istruzione condizionale che appare in uno dei rami di un’altra istruzione condizionale.

dichiarazione di ritorno Un’istruzione che fa terminare immediatamente una funzione e tornare al chiamante.

ricorsione Il processo di chiamata della funzione attualmente in esecuzione. caso base Un ramo condizionale in una funzione ricorsiva che non effettua una

chiamata ricorsiva.

ricorsione infinita Una ricorsione che non ha un caso di base o non lo raggiunge mai. Alla fine, una ricorsione infinita causa unerrore di runtime.

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 26 / 30

(37)

Glossario

Glossario II

dichiarazione composta Un’istruzione composta da un’intestazione e un corpo. Il corpo termina con la parola chiaveend.

ramo Una delle sequenze alternative di istruzioni in un’istruzione condizionale.

condizionale concatenato Una dichiarazione condizionale con una serie di diramazioni alternative.

condizionale annidato Un’istruzione condizionale che appare in uno dei rami di un’altra istruzione condizionale.

dichiarazione di ritorno Un’istruzione che fa terminare immediatamente una funzione e tornare al chiamante.

ricorsione Il processo di chiamata della funzione attualmente in esecuzione.

caso base Un ramo condizionale in una funzione ricorsiva che non effettua una chiamata ricorsiva.

ricorsione infinita Una ricorsione che non ha un caso di base o non lo raggiunge mai. Alla fine, una ricorsione infinita causa unerrore di runtime.

(38)

Glossario

Glossario II

dichiarazione composta Un’istruzione composta da un’intestazione e un corpo. Il corpo termina con la parola chiaveend.

ramo Una delle sequenze alternative di istruzioni in un’istruzione condizionale.

condizionale concatenato Una dichiarazione condizionale con una serie di diramazioni alternative.

condizionale annidato Un’istruzione condizionale che appare in uno dei rami di un’altra istruzione condizionale.

dichiarazione di ritorno Un’istruzione che fa terminare immediatamente una funzione e tornare al chiamante.

ricorsione Il processo di chiamata della funzione attualmente in esecuzione.

caso base Un ramo condizionale in una funzione ricorsiva che non effettua una chiamata ricorsiva.

ricorsione infinita Una ricorsione che non ha un caso di base o non lo raggiunge mai. Alla fine, una ricorsione infinita causa unerrore di runtime.

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 26 / 30

(39)

Glossario

Glossario II

dichiarazione composta Un’istruzione composta da un’intestazione e un corpo. Il corpo termina con la parola chiaveend.

ramo Una delle sequenze alternative di istruzioni in un’istruzione condizionale.

condizionale concatenato Una dichiarazione condizionale con una serie di diramazioni alternative.

condizionale annidato Un’istruzione condizionale che appare in uno dei rami di un’altra istruzione condizionale.

dichiarazione di ritorno Un’istruzione che fa terminare immediatamente una funzione e tornare al chiamante.

ricorsione Il processo di chiamata della funzione attualmente in esecuzione.

caso base Un ramo condizionale in una funzione ricorsiva che non effettua una chiamata ricorsiva.

ricorsione infinita Una ricorsione che non ha un caso di base o non lo raggiunge mai. Alla fine, una ricorsione infinita causa unerrore di

(40)

Exercizi

Section 7 Exercizi

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 27 / 30

(41)

Exercizi

Exercizi

(42)

Exercizi

Fattoriale di n

Sviluppare in almeno due modi differenti la funzione fact(n) definita come segue:

n! =

( n (n − 1)!

1

if n = 1

Esempi di esecuzione:

julia>

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 29 / 30

(43)

Exercizi

Fattoriale di n

Sviluppare in almeno due modi differenti la funzione fact(n) definita come segue:

n! =

( n (n − 1)!

1

if n = 1

Esempi di esecuzione:

julia>

(44)

Exercizi

coefficiente binomiale

kn

Sviluppare in almeno due modi differenti la funzione BinCoeff(n,k) definita come segue:

n k

!

=









n − 1 k

!

+

n − 1 k − 1

!

1

if k = 0 or n = k

Esempi di esecuzione:

julia>

Scrivere un programma che stampi la matrice dei coefficienti binomiali per n = 0 : 10

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 30 / 30

(45)

Exercizi

coefficiente binomiale

kn

Sviluppare in almeno due modi differenti la funzione BinCoeff(n,k) definita come segue:

n k

!

=









n − 1 k

!

+

n − 1 k − 1

!

1

if k = 0 or n = k

Esempi di esecuzione:

julia>

Scrivere un programma che stampi la matrice dei coefficienti binomiali

per n = 0 : 10

(46)

Exercizi

coefficiente binomiale

kn

Sviluppare in almeno due modi differenti la funzione BinCoeff(n,k) definita come segue:

n k

!

=









n − 1 k

!

+

n − 1 k − 1

!

1

if k = 0 or n = k

Esempi di esecuzione:

julia>

Scrivere un programma che stampi la matrice dei coefficienti binomiali per n = 0 : 10

THINK JULIA – Capitolo 5 (seconda parte) Fondamenti di Informatica (Elettronici) 25 ottobre 2021 30 / 30

Riferimenti

Documenti correlati

Così ad esempio, alla metà degli anni '90 del secolo scorso, due antropologi di rilievo come Marc Augè e Clifford Geertz, con un background culturale differente,

This paper reviews the major (Calcium, Phosphorus, Potassium, Sodium, Chlorine, Sulphur, Magnesium) and the trace elements (Iron, Copper, Cobalt, Iodine, Manganese, Zync,

Available Open Access on Cadmus, European University Institute Research Repository.... European

Fig.. ste aree della Sardegna le cavità minerarie e le grotte di miniera sono di primaria importanza per molte specie di pipistrelli che trovano rifu- gio nel loro interno. La

In discussing Northanger Abbey it is essential to see that the problems Catherine, the heroine, has in understanding herself and her experience are not different from the problems

Jean Guiguet specifically identifies Virginia Woolf with her six protagonists: She is in love with words, like Bernard: in love with books, like Neville: a lover of action, like

Simona scarsa medio-bassa medio-tardiva rotonda blu scuro Sofia scarsa medio-elevata medio-precoce ovale blu scuro Speranza medio-scarsa media intermedia rotonda

Secondo Bobbio, questa impostazione, nella misura in cui prevede che la funzione del potere politico (del diritto positivo) sia quella di rafforzare e garantire,