IMC!


Contenuti


Foto

 







Curiosando...
Novita  Novità Link  Link Blog  Blog English  Español 
13 - Script ricorsivi nella bash

 | 

Una funzione ricorsiva è una funzione che chiama sè stessa più volte. Puo essere utile ad esempio quando è necessario effettuare più volte un'operazione su dei dati. Vediamo un esempio per chiarire meglio come questa tipoligia di funzioni venga implementata nella bash.
Consideriamo l'algoritmo di Euclide, che calcola il massimo comune divisore tra due numeri M e N. L'algoritmo, schematicamente, ha questa struttura:

if [ N = 0 ]
  M è il MCD
else
  calcola il resto R di M/N
  if [ R = 0 ]
    MCD = R
  else
    scambia M e N
    ripeti da inizio
  fi
fi
 

e può essere implementato in uno script di questo tipo:

#!/bin/bash

# Definisco le variabili per exit
EXIT_SUCCESS=0
EXIT_FAILURE=1

utilizzo()
{
  echo
  echo "Utilizzo della funzione:"
  echo "$(basename $0) <primo numero> <secondo numero>"
  echo
  exit $EXIT_FAILURE
}

mcd ()
{
  # Assegna come nuovi m e n i valori passati
  # dall'ultima chiamata
  m=$1
  n=$2

  # Verifica che m e n siano validi, o che
  # non sia stata raggiunta la fine
  # dell'algoritmo
  if [ $n -eq 0 -a $m -eq 0 ]; then
    echo "mcd(0,0) non è definito!"
    exit $EXIT_FAILURE
  elif [ $m -eq 0 ]; then
    return $n
  elif [ $n -eq 0 ]; then
    return $m
  fi

  # Chiamata ricorsiva della funzione
  # Il primo parametro è il resto di $n / $m,
  # Il secondo è $m.
  # Notiamo come $m e $n vengano continuamente
  # invertiti.
  mcd $(( $n % $m )) $m
}


########################
# Programma principale #
########################

# Controllo di sicurezza: se il numero di valori
# passati non è 2, mostra l'utilizzo di questo
# script
if [ $# -ne 2 ]; then
  usage
fi

# Chiama la funzione mcd, e gli passa come parametri i valori
# scritti a riga di comando al momento dell'esecuzione dello
# script
mcd $1 $2

# Stampa i risultati
MCD=$?
echo "Il mcd di \"$1\" e \"$2\" è: $MCD"
exit $EXIT_SUCCESS
 


 | 







Commenti

Nessun commento presente!

Scrivi un commento

Pui scrivere quì sotto un commento all'articolo che hai appena letto. Non sono abilitate smile, immagini e link. La lunghezza massima del commento è 4000 caratteri. La buona educazione è benvenuta, tutti i commenti offensivi saranno cancellati.

Your comment (lascia bianco!):
Utente (max 25 caratteri, obbligatorio)
Sito web (max 255 caratteri, facoltativo)
e-Mail (max 255 caratteri, facoltativa, non sarà pubblicata) Your opinion (lascia bianco!):
Commento (max 4000 caratteri, obbligatorio):





Valid HTML 4.01 Transitional
E-Mail - 89.8 ms

Valid HTML 4.01 Transitional