Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_Metod_2009_VVYeD.doc
Скачиваний:
6
Добавлен:
06.12.2018
Размер:
1.14 Mб
Скачать

Лабораторная работа 5. Программирование алгоритмов при помощи рекурсивных процедур и функций

5.1 Цель работы

Познакомиться с понятиями "рекурсия", закрепить практические навыки работы с VBScript на примере реализации алгоритмов при помощи рекурсивных процедур и функций.

5.2 Теоретические сведения

Рекурсия (самоповторение) – это действие, возвращающееся к “самому себе”. Существует два вида рекурсии:

  1. прямая рекурсия (процедура или функция вызывает саму себя);

  2. косвенная рекурсия означает, что одна процедура или функция вызывает другую процедуру или функцию, а это в свою очередь прямо или косвенно приводит к вызову первоначальной процедуры или функции.

Рекурсию следует использовать только тогда, когда задача легко поддается рекурсивному решению. Важно отметить, что любая задача, которая решена рекурсивно, может быть решена и без рекурсии.

С понятием "рекурсия" тесно связано понятие "рекуррентная последовательность”, вычисление n-го члена которой производится с помощью рекурсии. Определим это понятие.

Числовая последовательность {хk} называется  рекуррентной последовательностью, если

где k=p, p=1, …

5.3 Демонстрационные примеры Пример 1

'Имя файла Factorial.vbs

'Задача: вычислить значение факториала введённого натурального числа n

'--------------------------------------

FUNCTION RecFact(n)

'Рекурсивное вычисление факториала

If n=0 Then

RecFact=1

Else

RecFact=n*RecFact(n-1)

End If

End FUNCTION

'---------------------------------------

FUNCTION NonRecFact(n)

'Вычисление факториала при помощи цикла

dim P

P=1

While (n>1)

P=n*P

n=n-1

WEnd

NonRecFact=P

End FUNCTION

'---------------------------------------

Dim n

n=CInt(InputBox("Введите натуральное число",_

"Вычисление факториала натурального n:","0"))

number=n

MsgBox "Рекурсивно вычисленный факториал: "&RecFact(n)&_

VbCrLf&_

"Нерекурсивно вычисленный факториал: "&NonRecFact(n)_

,vbInformation,"Результат вычисления факториала числа "&number&":"

Пример 2

'Имя файла Nod.vbs

'Задача: найти наибольший общий делитель (НОД) двух целых чисел

'--------------------------------------

FUNCTION RecNod(n,m)

'Рекурсивное вычисление НОД

If n=m Then

RecNod=n

ElseIf n>m Then

RecNod=RecNod(n-m, m)

Else

RecNod=RecNod(n, m-n)

End If

End FUNCTION

'---------------------------------------

FUNCTION NonRecNod(n,m)

'Вычисление НОД с помощью цикла

While (n<>m)

If n>m Then

n=n-m

Else

m=m-n

End If

WEnd

NonRecNod=n

End FUNCTION

'---------------------------------------

Dim n, m

n=CLng(InputBox("Введите натуральное число n", "Вычисление НОД: ","25"))

m=CLng(InputBox("Введите натуральное число m", "Вычисление НОД: ","50"))

MsgBox "Рекурсивно вычисленный НОД: "&CStr(RecNod(abs(n),abs(m)))&_

VbCrLf&_

"Нерекурсивно вычисленный НОД: "&CStr(NonRecNod(abs(n),abs(m)))_

,vbInformation,"Результат вычисления НОД:"

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]