Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

05. Функции / Lesson05-presentation

.pdf
Скачиваний:
35
Добавлен:
18.03.2015
Размер:
155.4 Кб
Скачать

Пример рекурсивной функции: числа Фибоначчи

F[0] = 0

F[1] = 1

F[n] = F[n-1] + F[n-2]

0, 1, 2, 3, 5, 8, 13, …

int fib(int n)

{

if (n == 0 || n == 1) return n;

return fib(n-1) + fib(n-2);

}

терминальное условие рекурсии

Пример рекурсии: печать дерева каталогов

void printFolderTree(folderPath, level)

{

printFolderName(level);

Для всех подкаталогов subfolderPath printFolderTree(subfolderPath, level+1);

}

Переменные-функции

//Введение типа функции, возвращающей double и

//принимающей один параметр типа double typedef double (*func_t)(double);

//объявление переменной-функции

func_t myFunc;

//присваивание переменной-функции адреса какой-либо

//реальной функции подходящего типа

myFunc = sin;

// Вызов переменной-функции

double y = myFunc(x); // вернёт sin(x)

Массив переменных-функций

//Введение типа функции, возвращающей double и

//принимающей один параметр типа double typedef double (*func_t)(double);

//объявление массива функций

func_t myFuncs[10];

//заполнение массива функций адресами

//реальных функций

myFuncs[0] = sin; myFuncs[1] = cos;

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

double y = myFuncs[1](x); // вернёт cos(x)

Функция как параметр другой функций

// Функция qsort из <cstdlib> требует параметр-функцию

void qsort(void *base, size_t nElems, size_t elemSize, int(*fCmp)(const void *, const void *));

// Нужно создать функцию такого типа

int intCmp(const void * pa, const void * pb)

{

}

// и передать её в качестве параметра функции qsort qsort (&a[0], 10, sizeof(int), intCmp);