Пример 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. Не забывайте, что рекурсия весьма ресурсоемкое удовольствие, к тому же она выполняется слишком медленно, поэтому не следует использовать ее в сценариях.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Использование условных переменных
Использование условных переменных Если код, который необходимо протестировать, выполняется не в контексте процесса, или необходим более глобальный метод для контроля новых функций, то можно использовать условные переменные. Этот подход даже более простой, чем
Блокировка локальных и удаленных сценариев WSH. Пример административного шаблона
Блокировка локальных и удаленных сценариев WSH. Пример административного шаблона Как уже было указано в табл. 4.2, за блокировку локальных и удаленных сценариев WSH отвечают соответственно параметры реестра Enabled и Remote: если Enabled равно "0", то на машине вообще нельзя выполнять
Использование локальных сценариев запуска
Использование локальных сценариев запуска Как правило, в системе Linux большинство стандартных серверов запускается либо с помощью сценариев SysV, либо суперсервера. Исключением является сервер X, для запуска которого в файле /etc/inittab предусмотрена соответствующая запись.
23-й час Использование SQL в локальных и глобальных сетях
23-й час Использование SQL в локальных и глобальных сетях В ходе этого урока мы с вами поговорим о том как использовать SQL в сю-виях реального предприятия ичи локачьной сети компании и как испочьзовать SQL в InternetОсновными на этом уроке будут следующие темы• SQL на уровне
Использование переменных и выражений в моделях
Использование переменных и выражений в моделях Развитие технологий постоянно предъявляет все более жесткие требования к инженеру-конструктору. На первое место в современном конструировании выходят скорость и динамичность выполнения проектов (чертежей или моделей) в
Использование локальных процедур
Использование локальных процедур Объявление процедуры локальной помогает избежать многих ошибок. Поскольку в таком случае можно вызывать процедуру только в рамках содержащего ее модуля, легче контролировать условия, которые складываются во время вызова (эти условия
Использование переменных в операторах присваивания
Использование переменных в операторах присваивания Можно присваивать переменным не только буквальные значения - точно так же можно присваивать и значения, определяемые другими переменными. В операторе curSalePrice = curCost * sngMargin переменной curSalePrice присваивается значение,
Использование переменных документа
Использование переменных документа Отличаясь от остальных приложений Office, Word позволяет определять в вашем коде специальные переменные документа, которые сохраняются вместе с документом. Переменные документа позволяют сохранять используемые процедурой значения между
Пример 9-6. arglist: Вывод списка аргументов с помощью переменных $* и $@
Пример 9-6. arglist: Вывод списка аргументов с помощью переменных $* и $@ #!/bin/bash# Вызовите сценарий с несколькими аргументами, например: "один два три".E_BADARGS=65if [ ! -n "$1" ]then echo "Порядок использования: `basename $0` argument1 argument2 и т.д." exit $E_BADARGSfiechoindex=1echo "Список аргументов в переменной "$*":"for arg in
Пример 19-1. Область видимости переменных
Пример 19-1. Область видимости переменных #!/bin/bash# subshell.shechoouter_variable=Outer(inner_variable=Innerecho "Дочерний процесс, "inner_variable" = $inner_variable"echo "Дочерний процесс, "outer" = $outer_variable")echoif [ -z "$inner_variable" ]then echo "Переменная inner_variable не определена в родительской оболочке"else echo "Переменная inner_variable
Пример 22-8. Область видимости локальных переменных
Пример 22-8. Область видимости локальных переменных #!/bin/bashfunc (){ local loc_var=23 # Объявление локальной переменной. echo echo ""loc_var" в функции = $loc_var" global_var=999 # Эта переменная не была объявлена локальной. echo ""global_var" в функции = $global_var"}func# Проверим, "видна" ли локальная переменная
Урок 8. Использование переменных
Урок 8. Использование переменных Переменные представляют собой поименованные области памяти, содержащие какую-либо информацию, такую как числа или последовательность символов. Например, вы можете создать переменную и поместить в нее число 5. Если вы прибавите к данной
8.2.1. Использование рекурсии
8.2.1. Использование рекурсии Этот принцип состоит в том, чтобы разбить задачу на случаи, относящиеся к двум группам:(1) тривиальные, или "граничные" случаи;(2) "общие" случаи, в которых решение получается из решений для (более простых) вариантов самой исходной задачи.Этот