Fibonacci
Afficher la suite de Fibonacci en bash, php, python3
En bash:
#!/bin/bash
#set -x
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
function is_int {
if grep -E -v -q "^-?[0-9]+$" <<< $1; then
return 1
fi
return 0
}
if [ -z $1 ] || ! is_int $1 || (($1 <= 0)); then
printf "\
Usage: %s nbr_int
nbr_int: Un nombre entier supérieur à 0\n" $0
exit 1
fi
a=0
b=1
while (($b < $1)); do
printf "%d\n" $b
((b=a+b))
((a=b-a))
done
printf "b/a = %1.15f\n" $(echo $b/$a | bc -l)
exit 0
En php:
#!/usr/bin/env php
<?php
if(! isset($argv[1]) || ! is_numeric($argv[1]) || intval($argv[1]) <= 0){
printf("Usage: %s nbr_int
nbr_int: Un nombre entier supérieur à 0\n", $argv[0]);
exit(1);
}
$nbr_int = intval($argv[1]);
$a = 0;
$b = 1;
while ($b < $nbr_int) {
printf("%d\n", $b);
$b = $a + $b;
$a = $b - $a;
}
printf("b/a = %1.15f\n", $b/$a);
exit(0);
En python3:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys, argparse
parser = argparse.ArgumentParser(description=u"Calcul et affiche les n premiers nombres de la suite de Fibonacci.")
parser.add_argument("number", help=u"Nombre maximum de calcul de la séquence. Ce nombre doit égal ou supérieur à 2.", type=int)
parser.add_argument("-g", "--display-golden-number", dest="golden", help=u"Afficher le nombre d'or.", action="store_true")
parser.add_argument("--log", default=sys.stdout, type=argparse.FileType('w'), help=u"Fichier où sera enregistré le résultat.")
args = parser.parse_args()
if args.number < 2:
print(u"Indiquer un nombre supérieur ou égal à 2.")
sys.exit(1)
a,b = 0,1
while b < args.number:
print("{:d}".format(b), file=args.log)
a,b = b,a+b
if args.golden:
print(u"\nb/a = {:1.15f} (Nombre d'or)".format(b/a), file=args.log)
args.log.close()
sys.exit(0)
Tous ces scripts prennent en paramètre un nombre entier positif.
En prime, le quotient des deux derniers termes est affiché et représente le nombre d'or si le nombre passé en argument est supérieur ou égal à 1 000 000 (pour la précision du nombre d'or).
Le script Python est un peu plus développé avec une gestion des arguments plus pointue.
Ajouter un commentaire