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

Int main()

{

int A=2, B=6, C=3;

char eol = '\n';

// Вызовы встраиваемой функции, // генерируют вее тело функции

cout « Sum(А, В) « eol;

cout « Sum(В, С) « eol;

cout « Sum(A, С) « eol;

return 0;

}

int Sum(int x, int y)

{

return x + y;

}

Функция может вызывать сама себя. При этом говорят, что возник рекурсивный вызов.

Рекурсия бывает:

простой - если функция в теле содержит вызов самой себя;

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

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

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

Некоторые задачи на практике могут быть проще и нагляднее решены именно с использованием рекурсивных функций. Например, решение тривиальной задачи нахождения факториала при обращении к рекурсии могло бы выглядеть следующим образом:

#include <iostream.h>

long int fact(long);

Int main 0

{

int count = 1;

while(count && count <31)

{

cout « "Введите целое число: ";

cin » count;

cout « fact(count) « '\n';

}

return 0;

}

long int fact(long x)

{

if(x=0 || x=l)

return 1;

return x * fact(x-l);

}

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

Литература

  1. Глушаков С.В. , Коваль А.В., Черепнин С.А. Язык программирования С++, учебный курс: Харьков: «Фолио Аст», 2001-500 с.

  2. Харви Дейтел, Пол Дейтел, Как программировать на С++: Третье издание. Пер. с англ.-М.: ЗАО «Издательство БИНОМ», 2001 г. -1152 с.: ил.

  3. Либерти, Джесс. Освой самостоятельно С++: Пер. с англ.-М.: ЗАО «Издательство Бином», 2001г,-1152 с.

Упражнения для самопроверки

1) Оператор________ в вызываемой функции используется, чтобы передать значение в вызывающую функцию.

2) Ключевое слово________используется в заголовке функции, чтобы указать, что функция не возвращает значение или не содержит параметров.

3)_______ позволяет компилятору проверить количество, типы, и порядок следования аргументов, передаваемых функции.

4) Функция­­­_______ используется для получения случайных чисел.

5) Локальная переменная функции будет сохранять свое значение между ее вызовами, если она объявлена, как имеющая класс памяти _______.

6) Напишите прототипы для следующих функций:

а) Функция hy, которая принимает два аргумента у1 и у2 с плавающей точкой с двойной точностью и возвращает результат аналогичного типа.

б) Функция zy, которая принимает три целых аргументаx,y,zи возвращает целое значение.

г) Функция Inне получает ни одного аргумента и не возвращает значение.

7)В каком случае прототип функции должен содержать объявление типа параметра double&.

8) Напишите законченную программу на С++, использующую встраиваемую функцию sfVolume, которая предлагает пользователю ввести радиус сферы, вычисляет и печатает объем сферы с помощью оператораVol=(4/3*3.14159*pow(rad,3)).

9) Найдите и исправте ошибку в каждом из следующих фрагментов программ:

  1. int g(void)

{

cout<< “ внутри функцииg”<<endl;

int h(void)

{

cout<< “ внутри функцииh”<<endl;

}

}

  1. int sum (int x, int y)

{

int result;

result = x+y;

}

  1. int sum (int n)

{

if (n==0)

return o;

else

n+sum (n-1);

}

10) Напишите функцию kr/, которая определяет для пары целых чисел кратно ли второе число первому. Функция должна принимать два целых аргумента и возвращатьtrue, если второе число кратно первому иfalse- если нет. Используйте эту функцию в программе, которая вводит последовательность пар целых чисел.

20

Соседние файлы в папке ЛекцииКарасева