version 1: linéaire
#!/bin/bash # Vérifie qu'un argument est fourni if [ $# -ne 1 ]; then echo "Usage: $0 <nombre>" exit 1 fi # Vérifie que l'argument est un nombre positif if ! [[ $1 =~ ^[0-9]+$ ]]; then echo "Erreur: L'argument doit être un nombre entier positif." exit 1 fi n=$1 factorial=1 # Calcul du factoriel for (( i=1; i<=n; i++ )); do factorial=$((factorial * i)) done echo "Factoriel de $n = $factorial"
Analyser le code
Version 2, récursive
la fonction factorial s’appelle elle même jusqu’à la solution
#!/bin/bash # Fonction récursive pour calculer le factoriel factorial() { local n=$1 # Cas de base : factoriel de 0 ou 1 vaut 1 if [ $n -le 1 ]; then echo 1 else # Appel récursif : n! = n * (n-1)! local prev=$(factorial $((n - 1))) echo $((n * prev)) fi } # Vérification des arguments if [ $# -ne 1 ]; then echo "Usage: $0 <nombre>" exit 1 fi if ! [[ $1 =~ ^[0-9]+$ ]]; then echo "Erreur: L'argument doit être un nombre entier positif." exit 1 fi # Calcul et affichage du résultat result=$(factorial $1) echo "Factoriel de $1 = $result"
