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)

infoTous 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.