Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with and , the first terms will be: 1,2,3,5,8,13,21,34,55,89,…
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
Qui l'idea è di generare, in qualche modo, in numeri di Fibonacci fino a quattro milioni, e filtrare quelli pari per sommarli ad S. La parte interessante è come generare i numeri della sequenza di Fibonacci: un primo modo è di aggiornarli in place, cioè direttamente nel codice, come fa la linea fibs[1], fibs[2] = sum(fibs), fibs[1]. Altrimenti potremmo affidarci a delle funzioni, che calcolano l'n-esimo numero di Fibonacci. La creazione di questa funzione nella forma immediata è molto inefficiente, mentre in quella veloce è ottimizzata conservando i valori creati e richiamandoli per i futuri calcoli.
S = 0
fibs = [21]
while fibs[1] <= 4_000_000if iseven(fibs[1])
S += fibs[1]
end
fibs[1], fibs[2] = sum(fibs), fibs[1]
end@show S
Se volessimo invece appoggiarci a delle funzioni, per generare i numeri della sequenza, queste sarebbero due possibili definizioni (scritte in forma didattica, con le varie print e il parametro depth per mostrare cosa accade materialmente quando le eseguiamo):
function fib_naive(n, depth = 0)
println("| "^depth * "Calcolo F($n)")
n <= 2 && return n
return fib_naive(n-1, depth + 1) + fib_naive(n-2, depth + 1)
end