П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 6195 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 8325 раз(а).

Учебник HTML.
Просмотров 4940 раз(а).

Руководство по PHP5.
Просмотров 2071 раз(а).

Хостинг через призму DNS.
Просмотров 7078 раз(а).

Подборка текстов стандартных документов.
Просмотров 57583 раз(а).

Учебник PHP - Самоучитель
Просмотров 5238 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 11365 раз(а).

Внешние атаки...
Просмотров 7457 раз(а).

Учебник PHP.
Просмотров 4340 раз(а).

SSI в примерах.
Просмотров 1245 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





22.2.1. Локальные переменные делают возможной рекурсию.

Хотя локальные переменные и допускают рекурсию, [52] но она сопряжена с большими накладными расходами и не рекомендуется для использования в сценариях. [53]

Пример 22-12. Использование локальных переменных при рекурсии

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

Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: