Книга: Искусство программирования на языке сценариев командной оболочки
Пример 22-9. Использование локальных переменных при рекурсии
Пример 22-9. Использование локальных переменных при рекурсии
#!/bin/bash
# факториал
# ---------
# Действительно ли bash допускает рекурсию?
# Да! Но...
# Нужно быть действительно дубинноголовым, чтобы использовать ее в сценариях
# на языке командной оболочки.
MAX_ARG=5
E_WRONG_ARGS=65
E_RANGE_ERR=66
if [ -z "$1" ]
then
echo "Порядок использования: `basename $0` число"
exit $E_WRONG_ARGS
fi
if [ "$1" -gt $MAX_ARG ]
then
echo "Выход за верхний предел (максимально возможное число -- 5)."
# Вернитесь к реальности.
# Если вам захочется поднять верхнюю границу,
# то перепишите эту программу на настоящем языке программирования.
exit $E_RANGE_ERR
fi
fact ()
{
local number=$1
# Переменная "number" должна быть объявлена как локальная,
# иначе результат будет неверный.
if [ "$number" -eq 0 ]
then
factorial=1 # Факториал числа 0 = 1.
else
let "decrnum = number - 1"
fact $decrnum # Рекурсивный вызов функции.
let "factorial = $number * $?"
fi
return $factorial
}
fact $1
echo "Факториал числа $1 = $?."
exit 0
Еще один пример использования рекурсии вы найдете в Пример A-18. Не забывайте, что рекурсия весьма ресурсоемкое удовольствие, к тому же она выполняется слишком медленно, поэтому не следует использовать ее в сценариях.
- Пример установочного скрипта
- Пример из практики
- Восстановление с использованием инструмента gbak
- Типы страниц и их использование
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Использование констант
- Улучшенный протокол локальных соединений (XNET)
- Значения переменных по умолчанию
- Увеличение глубины рекурсии процедур и триггеров
- Использование переменной окружения ISC_PATH
- Использование сервера Yaffil внутри процесса
- Использование CAST() с типами дата