Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример 6. Примеры рекурсивных функций




Примеры рекурсивных функций

Рекурсия

End Sub

End Function

End Function

End Sub

End Sub

Randomize Timer

End Sub

End Sub

 

Sub ochistka()

'очистка рабочего листа от посторонних надписей

Range("A1:Z100").Clear

 

Sub zapolnenie(n)

Dim i As Byte, j As Byte

Dim a() As Integer

Dim max As Integer, min As Integer

ReDim a(n, n)

'Заполнение массива с использованием

'генератора случайных чисел

For i = 1 To n

For j = 1 To n

a(i, j) = 50 - Int (Rnd () * 100)

Next j

Next i

'Вызов процедуры вывода массива в рабочий лист

Cells (3, 1) = "Исходный массив:"

Call vivod(a(), n, n, 3)

'Вызов функции поиска максимума

max = maximum(a(), n)

'Вызов функции поиска минимума

min = minimum(a(), n)

'Вызов процедуры замены диагональных элементов

Call zamena(a(), n, max, min)

 

Sub vivod(b() As Integer, ByVal i1 As Byte, ByVal j1 As Byte, ByVal k As Byte)

'процедура вывода массива на печать в рабочий лист

Dim i As Byte, j As Byte

For i = 1 To i1

For j = 1 To j1

Cells (i + k, j) = b(i, j)

Next j

Next i

 

Function maximum(c() As Integer, ByVal i2 As Byte) As Integer

'функция поиска минимального элемента на диагонали матрицы

Dim i As Byte

maximum = c(1, 1)

For i = 1 To i2

If c(i, i) > maximum Then maximum = c(i, i)

Next i

 

Function minimum(c() As Integer, ByVal i2 As Byte) As Integer

'функция поиска минимума на диагонале в матрице

Dim i As Byte

minimum = c(1, 1)

For i = 1 To i2

If c(i, i) < minimum Then minimum = c(i, i)

Next i

 

Sub zamena(d() As Integer, ByVal i3 As Byte, ByVal maxm As Integer, ByVal minm As Integer)

Dim i As Byte

'процедура замены диагональных элементов

For i = 1 To i3

d(i, i) = maxm

d(i, i3 - i + 1) = minm

Next i

'замена центрального элемента на 0 при нечетном размере матрицы

If Int (i3 / 2) <> i3 / 2 Then d(Int (i3 / 2) + 1, Int (i3 / 2) + 1) = 0

' вывод на печать преобразованного массива

Cells (i3 + 5, 1) = "Пребразованный массив:"

'вызов процедуры вывода

Call vivod(d(), i3, i3, i3 + 5)

 

 

Рекурсивная (recursive) функция или процедура – это функция или процедура, которая вызывает сама себя. Почти во всех случаях, рекурсия является ошибкой программирования и приводит к полному сбою программы. Наиболее общим симптомом возникновения этой проблемы является ошибка из-за нехватки памяти или ошибка из-за нехватки памяти в стеке.

 

 

Самый простой пример, который может продемонстрировать рекурсивную функцию, это – пример функции возведения числа в степень. Алгоритм рункции Rekurs основан на том факте, что число, возведенное в степень n, равно этому же числу, умноженному само на себя в степени n -1. Например, 23 равно 2х23-1 или 2х22.

Пример 5 содержит код функции Rekurs, возвращающей степень числа. В качестве аргументов функция принимает число и степень, в которую нужно возвести это число.

 

 

Function Rekurs(num As Double, pwr As Integer) As Double

'рекурсивное возведение в степень

If pwr = 0 Then

fPower = 1 'окончание рекурсии




Поделиться с друзьями:


Дата добавления: 2015-05-10; Просмотров: 298; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.