Università Statale di Milano - Dipartimento di Informatica: 6a lezione sul Linguaggio GO (Golang)

Regola di Fibonacci con il linguaggio Golang




In questo post pubblico tre soluzioni, la prima usa un ciclo for e la funzione Floor, la seconda  una funzione, la terza usa l'array (vettore)

La successione di Fibonacci è una successione di numeri interi naturali definibile assegnando i valori dei due primi termini, F0:= 0 ed F1:= 1, e chiedendo che per ogni successivo sia Fn := Fn-1 + Fn-2 con n>1.

La sequenza prende il nome dal matematico pisano del XIII secolo Leonardo Fibonacci e i termini di questa successione sono chiamati numeri di Fibonacci. L'intento di Fibonacci era quello di trovare una legge che descrivesse la crescita di una popolazione di conigli. Assumendo che: la prima coppia diventi fertile al compimento del primo mese e dia alla luce una nuova coppia al compimento del secondo mese; le nuove coppie nate si comportino in modo analogo; le coppie fertili, dal secondo mese di vita, diano alla luce una coppia di figli al mese; avremo che se partiamo con una singola coppia dopo un mese una coppia di conigli sarà fertile, e dopo due mesi due coppie di cui una sola fertile, nel mese seguente avremo 2+1=3 coppie perché solo la coppia fertile ha partorito, di queste tre ora saranno due le coppie fertili quindi nel mese seguente ci saranno 3+2=5 coppie, in questo modo il numero di coppie di conigli di ogni mese descrive la successione dei numeri di Fibonacci.
I primi 42 numeri di Fibonacci sono:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
(=F10)
89, 144, 233
, 377, 610, 987, 1597, 2584, 4181, 6765 (=F20)
10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040 (=F30),
1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141 (=F41)

Soluzione n.1 con il ciclo for e la funzione Floor:

package main

import (
"fmt"
"math"
)
func main() {
var num1, pre, suc float64

fmt.Println("Inserisci uno per la variabile pre: ")
fmt.Scan(&pre)
fmt.Println("Inserisci uno per la variabile suc : ")
fmt.Scan(&suc)

fmt.Println("Inserisci un numero intero: ")
fmt.Scan(&num1)

 if(num1<=0) {
fmt.Println("ERRORE!!! Il numero è non positivo. Ridigitare")
  }else {
  if num1!=math.Floor(num1) {
 fmt.Println("ERRORE!!! Il numero non è intero. Ridigitare")
    }else {
   fmt.Println ("1, ")
   for suc <= num1{
fmt.Printf("%d° successione: %d\n", suc)
   suc=suc+pre;
   pre=suc-pre;
   }
  }
 }
 }



Soluzione n. 2 con funzione:
package main

import "fmt"

func main() {
fmt.Println("Inserisci un numero intero: ")
var n int
fmt.Scan(&n)
for i := 1; i <= n; i++ {
fmt.Printf("%d° termine della successione di Fibonacci: %d\n", i, fibonacci(i))
}
}

func fibonacci(n int) (fib int) {
if n <= 2 {
fib = 1
} else {
fib = fibonacci(n-1) + fibonacci(n-2)
}
return
}

Soluzione n. 3 con l'uso dell'Array:

package main

import "fmt"

func main() {
const DIMENSIONE = 50

var numeri [DIMENSIONE]int

// Primi due valori della serie inizializzati a 1 per fibonacci(0) e fibonacci(1)
numeri[0], numeri[1] = 1, 1

for i:=2; i<DIMENSIONE; i++ {
numeri[i] = numeri[i-1] + numeri[i-2]
}

fmt.Println(numeri)
}

Commenti