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"

Analyser le code