Читайте также:
|
|
Эффективным средством программирования для некоторого класса задач является рекурсия. С ее помощью можно решать сложные задачи численного анализа, комбинаторики, алгоритмов сложной трансляции, операций над списковыми структурами и т. д. Программы в этом случае имеют небольшие объемы по сравнению с итерацией и требуют меньше времени на отладку.
Под рекурсией понимают способ задания функции через саму себя, например способ задания факториала в виде:
n! = (n-1)! * n.
В программировании под рекурсивной процедурой (функцией) к самой себе.
Под итерацией понимают результат многократно повторяемой какой-либо операции, например представление факториала в виде:
n! = 1*2*3*……… * n.
Среди широкого класса задач удобно представлять с использованием рекурсивных процедур (функций) те задачи, которые сводятся на подзадачи того е типа, но меньшей размерности.
Общая методика анализа рекурсии содержит три этапа.
1. Параметризация задачи, заключающаяся в выделении различных элементов, от которых зависит решение, в частности размерности решаемой задачи. После каждого рекурсивного вызова размерность должна убывать.
2. Поиск тривиального случая и его решение. Как правило, это ключевой этап в рекурсии, размерность задачи при этом часто равна 0 или 1.
3. Декомпозиция общего случая, имеющая целью привести задачу к одной или нескольким задачам того же типа, но меньшей размерности.
Рассмотрим понятие итеративного и рекурсивного алгоритмов на примере вычисления факториала.
Наиболее простой и естественной формой представления итеративного алгоритма при реализации на ПЭВМ является его описание с использованием цикла.
Итеративное вычисление алгоритма.
В соответствии с определением функции n! имеем:
1, если n=0;
n!=
1*2*3*………(n-1) * n, если n ≠ 0.
Вначале, в зависимости от текущего значения, происходит выбор способа вычисления n!.
Программа состоит из процедуры-функции FACTORIAL и основной программы. В основной программе происходит ввод значения N, вызов процедуры функции и печать результата.
Dim fac As Double
Dim a As Integer
‘ функция вычисления факториала
Private Function FACTORIAL(n As Integer) As Double
Dim i As Integer
Dim f As Double
If n = 0 Or n = 1 Then
FACTORIAL = 1
Else
f = 1
For i = 2 To n
f = f * i
Next i
End If
FACTORIAL = f
End Function
Private Sub Command1_Click()
‘ Основная программа
a = Val(InputBox("введите число"))
fac = FACTORIAL(a)
Print "a="; a
Print "факториал ="; fac
End Sub
Private Sub Command2_Click()
Form1.Cls
End Sub
Private Sub Command3_Click()
End
End Sub
Результат работы программы
Дата добавления: 2014-12-20; просмотров: 96 | Поможем написать вашу работу | Нарушение авторских прав |