Пример 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. Не забывайте, что рекурсия весьма ресурсоемкое удовольствие, к тому же она выполняется слишком медленно, поэтому не следует использовать ее в сценариях.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Использование переменных и выражений в моделях

Из книги КОМПАС-3D V10 на 100 % автора Кидрук Максим Иванович

Использование переменных и выражений в моделях Развитие технологий постоянно предъявляет все более жесткие требования к инженеру-конструктору. На первое место в современном конструировании выходят скорость и динамичность выполнения проектов (чертежей или моделей) в


Блокировка локальных и удаленных сценариев WSH. Пример административного шаблона

Из книги Windows Script Host для Windows 2000/XP автора Попов Андрей Владимирович

Блокировка локальных и удаленных сценариев WSH. Пример административного шаблона Как уже было указано в табл. 4.2, за блокировку локальных и удаленных сценариев WSH отвечают соответственно параметры реестра Enabled и Remote: если Enabled равно "0", то на машине вообще нельзя выполнять


Использование локальных сценариев запуска

Из книги Сетевые средства Linux автора Смит Родерик В.

Использование локальных сценариев запуска Как правило, в системе Linux большинство стандартных серверов запускается либо с помощью сценариев SysV, либо суперсервера. Исключением является сервер X, для запуска которого в файле /etc/inittab предусмотрена соответствующая запись.


8.2.1. Использование рекурсии

Из книги Программирование на языке Пролог для искусственного интеллекта автора Братко Иван

8.2.1. Использование рекурсии Этот принцип состоит в том, чтобы разбить задачу на случаи, относящиеся к двум группам:(1) тривиальные, или "граничные" случаи;(2) "общие" случаи, в которых решение получается из решений для (более простых) вариантов самой исходной задачи.Этот


Использование локальных процедур

Из книги VBA для чайников автора Каммингс Стив

Использование локальных процедур Объявление процедуры локальной помогает избежать многих ошибок. Поскольку в таком случае можно вызывать процедуру только в рамках содержащего ее модуля, легче контролировать условия, которые складываются во время вызова (эти условия


Использование переменных в операторах присваивания

Из книги Ubuntu 10. Краткое руководство пользователя автора Колисниченко Д. Н.

Использование переменных в операторах присваивания Можно присваивать переменным не только буквальные значения - точно так же можно присваивать и значения, определяемые другими переменными. В операторе curSalePrice = curCost * sngMargin переменной curSalePrice присваивается значение,


Использование переменных документа

Из книги Adobe Flash. Создание аркад, головоломок и других игр с помощью ActionScript автора Розенцвейг Гэри

Использование переменных документа Отличаясь от остальных приложений Office, Word позволяет определять в вашем коде специальные переменные документа, которые сохраняются вместе с документом. Переменные документа позволяют сохранять используемые процедурой значения между


Урок 8. Использование переменных

Из книги Разработка ядра Linux автора Лав Роберт

Урок 8. Использование переменных Переменные представляют собой поименованные области памяти, содержащие какую-либо информацию, такую как числа или последовательность символов. Например, вы можете создать переменную и поместить в нее число 5. Если вы прибавите к данной


Пример 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# Проверим, "видна" ли локальная переменная


23-й час Использование SQL в локальных и глобальных сетях

Из книги автора

23-й час Использование SQL в локальных и глобальных сетях В ходе этого урока мы с вами поговорим о том как использовать SQL в сю-виях реального предприятия ичи локачьной сети компании и как испочьзовать SQL в InternetОсновными на этом уроке будут следующие темы• SQL на уровне


Использование условных переменных

Из книги автора

Использование условных переменных Если код, который необходимо протестировать, выполняется не в контексте процесса, или необходим более глобальный метод для контроля новых функций, то можно использовать условные переменные. Этот подход даже более простой, чем