Using namespace std;

 

double Summa (int N, …)

{

va_list L; //Объявляем переменную для списка параметров

va_start (L, N); //Инициализируем переменную списка параметров

double R = 0;

for (int I = 0; I < N; ++ I)

R += va_arg (L, double); //Добавляем к R очередной аргумент

va_end (L); //Очищаем стек

Return R;

}

Int main ()

{

cout << Summa (3, 10.0, 20.0, 30.0) << endl; // 60

cout << Summa (5, 10.0, 20.0, 30.0, 40.0, 50.0) << endl; // 150

Return 0;

}

Рекурсивное использование функций

Функции внутри своего тела могут вызывать сами себя. Такой вызов называется рекурсией. На основе рекурсии можно строить очень интересные алгоритмы обработки данных.

Рассмотрим функцию возведения вещественного значения D в целую положительную степень P. Очевидная реализация этой функции основана на использовании цикла:

 

Double Pow (double D, unsigned P)

{

double R = 1;

for (unsigned I = 0; I < P; ++ I)

R *= D;

Return R;

}

 

А вот та же самая функция, реализованная на основе рекурсии:

 

Double Pow (double D, unsigned P)

{

If (P)

return Pow ( D, P – 1 ) * D;

Else

Return 1;

}

Основанием для рекурсии в этом примере послужило следующее рекуррентное соотношение:

Более сложный пример рекурсии основан на следующем рекуррентном соотношении (обычная реализация этого примера приведена в разделе 5.1 конспекта):

Через рекурсию это рекуррентное соотношение реализуется так:

 

Double T (unsigned n, double x)

{

Switch (n)

{

case 0:

Return 1;

case 1:

Return x;

default:

return 2 * x * T (n - 1, x) - T (n - 2, x);

}

}

Как видно из этих примеров алгоритм, реализуемый через рекурсию, выглядит более компактным и понятным по сравнению с обычной реализацией. С точки зрения эффективности, реализацию этих примеров через рекурсию вряд ли можно считать более эффективной, чем обычную реализацию. Это объясняется дополнительными затратами времени на многократный вызов функций и дополнительными затратами памяти (стека) на передачу аргументов.

Однако в ряде случаев использование рекурсии позволяет достичь существенного положительного эффекта.

Рассмотрим следующий пример: необходимо написать функцию для вычисления биномиальных коэффициентов:

n >= 0, 0 <= m <= n.

Значение биномиального коэффициента определяет число различных вариантов выбора m объектов из n объектов (как говорят, число сочетаний из n по m).

Основные свойства биномиальных коэффициентов:

Максимальное значение биномиального коэффициента достигается при m = n / 2.

Очевидная реализация функции основана на использовании циклов для вычисления числителя и знаменателя биномиального коэффициента и нахождения частного от их деления:

 








Дата добавления: 2019-02-07; просмотров: 204;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.