IMC!


Contents


Photos

 







Browsing around...
News  News Links  Links Blog  Blog Italiano  Español 
13 - Recursive functions in the bash

 | 

A recursive function is a function which calls itself more times. It can be useful for example when it's necessary to repeat many times the same operation on data. Here there's an example, based on the Euclid's algorithm for computing the greatest common divisor between two numbers M and N. The algorithm has this structure:

if [ N = 0 ]
  M is the GCD
else
  compute the remainder R of M/N
  if [ R = 0 ]
    GCD = R
  else
    exchange M and N
    repeat from beginning
  fi
fi
 

and it can be implemented with this script:

#!/bin/bash

# Exit variables
EXIT_SUCCESS=0
EXIT_FAILURE=1

usage()
{
  echo
  echo "Function usage:"
  echo "$(basename $0) <first number> <second number>"
  echo
  exit $EXIT_FAILURE
}

mcd ()
{
  # It sets as new m and n the values passed by the last call
  m=$1
  n=$2

  # It verifies that m and n are valid, or that
  # the end of the algorithm was not reached
  if [ $n -eq 0 -a $m -eq 0 ]; then
    echo "gcd(0,0) is not defined!"
    exit $EXIT_FAILURE
  elif [ $m -eq 0 ]; then
    return $n
  elif [ $n -eq 0 ]; then
    return $m
  fi

  # Recursive call of the function
  # The first parameter is the residue of $n / $m,
  # The second parameter is $m
  # the third parameter is $n
  # Note how $m and $n are continuously inverted
  mcd $(( $n % $m )) $m
}


################
# Main Program #
################

# Security control: if the number of passed values
# is not 2, it shows the usage of this script
if [ $# -ne 2 ]; then
  usage
fi

# It calls the function mcs, and it passes it as parameters
# the values written at the command line when the script
#  was launched
mcd $1 $2

# It prints the results
MCD=$?
echo "The gcd of \"$1\" and \"$2\" is: $MCD"
exit $EXIT_SUCCESS
 


 | 







Comments

No comment present!

Write a comment

You can write here a comment to the article you've just read. Smiles, links and images are not allowed. The maximum comment length is 4000 characters. Please be polite, all the offensive messages will be deleted.

Your comment (lascia bianco!):
Uses (max 25 characters, required)
Web site (max 255 characters, optional)
e-Mail (max 255 characters, optional, will not be published) Your opinion (lascia bianco!):
Comment (max 4000 characters, required):





Valid HTML 4.01 Transitional
E-Mail - 82.61 ms

Valid HTML 4.01 Transitional