Calcolo rapido dei Numeri di Fibonacci con il linguaggio Python

Documenti analoghi
Laboratorio di Informatica

Avviate l interprete Python selezionandolo dal menu dei programmi. Una volta avviato, l interprete presenta un cursore in cui inserire comandi

Laboratorio 8. Programmazione - CdS Matematica. Mirko Polato 15 Dicembre 2015

Laboratorio di Python

Laboratorio di Python

Input/Output. Console e File.

Laboratorio di Python

Introduzione al Python

Laboratorio di Python

STRUTTURE DI CONTROLLO DEL C++

Il linguaggio di programmazione Python

II Esercitazione: S.O. & Fortran 77

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Pensiero computazionale. Lezione 10 MIT AppInventor

Laboratorio di Python (con Linux)

Manuale EacqCE_Daemon. Versione manuale Copyright 2011 MMS Srl. Manuale EacqCE_Daemon Pagina 1

Raccolta di tutorial Python #1: basi e Tkinter dal sito francescomilanese.com SOMMARIO

Laboratorio di Python

Mini-Corso di Informatica

Laboratorio di Python (con Linux)

Laboratorio di Python

Introduzione al C. Esercitazione 6. Raffaele Nicolussi. Corso di Fondamenti di Informatica Ingegneria Clinica

Quando usiamo Python in modo interattivo in genere e' lo shell utilizzato che gestisce l'indentazione e la deindentazione.

Laboratorio di Python

Il programma OCTAVE per l insegnamento dell algebra lineare nella Scuola Secondaria p. 1

Appunti di informatica. Lezione 10 anno accademico Mario Verdicchio

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Sommario FONDAMENTI DI INFORMATICA. File e Python. Gestione di file. LINGUAGGIO Python Gestione dei file

Introduzione alla programmazione in Python: Parte II

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

Uso del terminale in ambiente UNIX

Metodi di Analisi dei Dati Sperimentali. AA 2009/2010 Pier Luca Maffettone. Elementi di Matlab

Corso di Linguaggi di Programmazione

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 14/02/2012 / Foglio delle domande / VERSIONE 1

Linguistica Computazionale: esercitazioni

Programmazione Assembly per 8088: Esercizi svolti

Programmazione 2. Introduzione al corso

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Introduzione alla programmazione Esercizi risolti

PROGRAMMAZIONE STRUTTURATA

Fondamenti di Programmazione

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Perché programmare? Capitolo 1. Python for Informatics: Exploring Information

Breve guida al linguaggio FORTRAN 77

Usare Python in Linux

Guida allo sviluppo di applicazioni in linguaggio C# 1. ELABORAZIONE FILE DI TESTO : RIPRENDIAMO ALCUNE IDEE... 2

Laboratorio di Python

Un piccolo esempio: script

28/02/2014 Copyright V. Moriggia

Allenamento - Selezione scolastica

Fortran in pillole : prima parte

Sommario PREFAZIONE...XI CAPITOLO 1: INTRODUZIONE AI COMPUTER, A INTERNET E AL WEB... 1 CAPITOLO 2: INTRODUZIONE ALLA PROGRAMMAZIONE IN C...

3. Indicare cosa sta a significare la figura geometrica del rombo in un diagramma a blocchi

Le Funzioni e la Ricorsione

Laboratorio di Python

Formalismi per la descrizione di algoritmi

Sommario. Introduzione... xv. Giorno 1 Elementi base del linguaggio C

Calcolare il massimo di una lista

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Gestione dei file di dati

Programmazione con il linguaggio LibreOffice Basic

ALGORITMI 1. GLI ALGORITMI 2. IL LINGUAGGIO DI PROGETTO

Ingegneria degli Algoritmi (II parte pratica)

Introduzione al MATLAB c Parte 3 Script e function

GM Lab lite. I s t r u z i o n i p e r l u s o REVISIONE DATA

MATLAB I/O. Informatica B - A.A. 2012/2013 ACQUISIZIONE DI INPUT DA TASTIERA

Dalla prima lezione. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 7 VARIABILI E COSTANTI 28/02/2016. Concetto di algoritmo

COMPLESSITÀ COMPUTAZIONALE DEGLI ALGORITMI

AUTOCAD: INTERFACCIA AUTOCAD: INTERFACCIA 2 AUTOCAD: INTERFACCIA. 2.1 premessa: ABBREVIAzIONI E ICONE 2.2 SCELTA DELL INTERFACCIA. ICONE Cmd Mnu.

Variabili e Istruzioni

provvedimenti.comune.rimini.it

Introduzione all ambiente MATLAB. Richiami II. Calcolo Numerico - A.A. 2008/09

Transcript:

Calcolo rapido dei Numeri di Fibonacci con il linguaggio Python Giuseppe Matarazzo Maggio 202 Sommario In altre occasioni, in passato, è capitato di utilizzare degli artifici per il calcolo dei numeri di Fibonacci con migliaia di cifre. Mai con la potenza esecutiva e l intrinseca eleganza del metodo presentato in questa memoria, che utilizza gli stringatissimi comandi del linguaggio per computer Python. Introduzione La serie dei Numeri di Fibonacci, che gode di una ben nota proprietà armonica, si ottiene sommando i due numeri interi precedenti quello esaminato. La procedura di calcolo è di tipo ricorsivo a partire dai primi due elementi F(0)=0 e F()=; da cui si ottiene F(2)=, F(3)=2 e così via. La routine base di calcolo è estremamente semplice. Eccola:... a,b = 0,... for i in range (n):...... a,b = b, a+b... return a Verrà esposto un metodo di raggruppamento delle migliaia di cifre del numero di Fibonacci F(n) in modo che esse siano leggibili su video e su file. I tripli puntini stanno a indicare l indentazione del codice Python, che nel listato non appaiono. Prima opzione: Calcolo di F(n) Si ricava solo il numero finale della serie di Fibonacci F(n); il tempo di esecuzione di Python è dell ordine di grandezza di qualche millisecondo. Come si vede nel prossimo riquadro, l algoritmo può essere scritto come una funzione di n, che viene richiamata dalla linea di comando Python (>>>). Si importa il file della funzione e si calcola il valore della serie F(n) con il comando indicato. Al risultato, comprendente tutte le cifre, viene accodata la lettera L per indicare che è stata superata la riga classica delle 80 colonne.

# ------ fb.py ------ a,b = 0, for i in range (n): a,b = b, a+b return a C:\>python Python 2.6.5 (r265:79096, Mar 9 200, 2:48:26) [MSC v.500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import fb >>> fb.myfib(3000) 40658863079726033356837879267052202508637369252408885430926905584274340 3733304966085004456083003683570694227458856936245476502674373045446852604866 06292497360503469773453733968874058472552900820490869075262205905454295889758 03092226708492747938595393338372447955434760732762400667379340859738 099320706776838934766764778739502744702686278209855384222585830640830668629 003582668572382023580250435954729979967652400478423637645334726836452648346 2458405732424499379724298602639800978669423920540462053886742573983507 485396423998273640679587845898658692285968043243656709796000L >>> fb.myfib(0) 0 >>> fb.myfib() >>> fb.myfib(2) >>> fb.myfib(3) 2 >>> quit() Si esce dall ambiente Python digitando quit(). Vediamo adesso come fare per raggruppare un numero F(n) di Fibonacci a migliaia di cifre, dividendolo per esempio in 8 colonne per riga. Non è questo il luogo per spiegare come fa Python ad effettuare una manovra simile, ci sono in rete innumerevoli tutorial a cui rimandiamo. Ci limitiamo solo a esporre algoritmo e output # ------------- BestFibo.py -------------- # Copia F(n), con n molto elevato su video, su file e incolonnato # a gruppi di 8 colonne per riga # ---------------------------------------- import sys sys.setrecursionlimit(5000) Consente di ampliare l intervallo di ricorsivita da 999 al limite della memoria del PC (variabile); scelto il valore 5000 2

a,b = 0, for i in range (n): a,b = b, a+b return a import itertools def split_columns(iterable, size): c = itertools.count() for k, g in itertools.groupby(iterable, lambda item: c.next() // size): yield list(g) def pretty(number, size=8, per_line=8): groups = split_columns(split_columns(str(number), size), per_line) lines = (.join(.join(group) for group in line) for line in groups) return \n.join(lines) numero = input(" Numero Fibonacci F(n) = ") s=myfib(numero) print pretty(s) # --- sotto: scrittura risultato su file -------- outfile = open( Fibonacci- + str(numero) +.txt, w+ ) outfile.write("f(" + str(numero) + str(") =") + \n ) outfile.write(pretty(s)) outfile.close() # ------- fine BestFibo.py -------------- File creato dal programma: Fibonacci-5000.txt F(5000) = 38789684 54388325 633709 63083259 0532082 277464 624506 6059724 8955503 90440370 9700822 964622 06694792 93452858 8829738 3483020 08954982 9403643 05694 78938364 2656394 406902 4505634 3370655 86562382 54656700 7252592 99038549 3383928 83637834 7589087 6297072 03333705 2923076 9300858 09384980 8038478 3996748 8876555 46537882 9644268 9298038 4637789 6902502 29308247 56663462 2492307 88332480 32803750 3930352 90330450 584270 47635242 2702093 4637699 0400674 7488329 8422894 927304 05432875 32980442 73676822 97724498 77498745 5569907 70388063 70468327 948358 97373999 30062 930849 085708 53978543 7995305 675076 0530756 88783766 03366735 54452588 4488624 692055 34574936 75897849 02798823 4350235 99844663 93485325 649522 2859563 06047536 46454707 60330902 42080638 2584929 56452876 2957575 9423438 0942302 974908 8984552 09854432 48659407 9793573 684692 86803954 53095453 886984 66508206 68628974 20639323 43848846 52409887 42395873 8097699 382037 74208932 26546887 93640026 30797780 0587592 9673896 3424252 579687 27556003 603370 54775472 46046399 87588046 9857840 86743828 6325 3

Seconda opzione: Calcolo di tutta la serie fino a F(n) In questo caso il codice Python assume la forma di lista di dati, e, ad ogni ciclo, il programma stampa l intera serie di Fibonacci fino al raggiungimento del numero n desiderato: # ------------ fiblist.py ---------------------------------------- # Risultato diretto della lista: # import fiblist oppure da riga di comando: python fiblist.py # # Per la scrittura su file: python fiblist.py > nomefile.txt # ricordarsi di dare l input, es.30, perché il prompt non appare) # ---------------------------------------------------------------- def fibonacci(): a, b = 0, while True: yield a a, b = b, a + b def firstn(g, n): for i in range(n): yield i, g.next() def print_list(list): for e in list: print e # scrive una riga per ciclo [i, F(i)] numero = input(" Numero finale della serie Fibonacci F(n) = " + \n ) s=list(firstn(fibonacci(), numero)) print print_list(s) Comando per risultati su file: python fiblist.py > 30.txt Numero finale della serie Fibonacci F(n) = 30 (0, 0) (, ) (2, ) (3, 2) (4, 3) (5, 5) (6, 8) (7, 3) (8, 2) (9, 34) (0, 55) (, 89) (2, 44) (3, 233) 4

(4, 377) (5, 60) (6, 987) (7, 597) (8, 2584) (9, 48) (20, 6765) (2, 0946) (22, 77) (23, 28657) (24, 46368) (25, 75025) (26, 2393) (27, 9648) (28, 378) (29, 54229) None = fine ciclo Conclusione E significativo osservare come l algoritmo esposto sia superiore alle strutture di altri linguaggi di programmazione (C++, Fortran) non solo per la sua intrinseca eleganza ma anche per la velocità nel raccogliere e conservare i risultati ottenuti.... 23-05-202... 5