Area(Radius, Pi); // Pi определяется пользователем
Листинг 7.4 демонстрирует возможность создания функции, параметры которой имеют значения по умолчанию, но при необходимости могут быть переопределены пользователь ским значением.
ЛИСТИНГ 7.4. Функция, вычисляющая площадь круга и использующая число Пи как второй параметр со значением по умолчанию 3,14______
#include
using namespace std;
// Объявление функции (Прототип)
double Area(double InputRadius, double Pi = 3.14); // Pi со значением // по умолчанию
int main ()
cout « "Enter radius: ";
double Radius = 0;
cin » Radius;
cout « "Pi is 3.14, do you wish to change this (y / n)? ";
char ChangePi = 'n';
cin » ChangePi;
15:
double CircleArea = 0;
17;if (ChangePi == 'y')
{
cout « "Enter new Pi: ";
double NewPi = 3.14;
ЗАНЯТИЕ 7. Организация кода при помощи функций
cin » NewPi;
CircleArea = Area (Radius, NewPi);
}
e l s e
CircleArea = Area(Radius); // 2-й параметр игнорируется,
26: // значит, использовать значение по умолчанию
// Вызов функции "Area"
cout « "Area is: " << CircleArea « endl;
return 0;
}
32:
// В определении функции значение по умолчанию не задается снова
double Area(double InputRadius, double Pi)
{
return Pi *InputRadius * InputRadius;
}
Результат
Enter__radius:_1__(y_/_n)_n'>Enter
|
radius: 1
|
(y / n)? n
|
Pi is
|
3.14, do you wish to change this
|
Area
|
is: 3.14
|
|
Следующий запуск:
|
|
Enter
|
radius: 1
|
(у/п)?у
|
Pi is
|
3.14, do you wish to change this
|
Enter new Pi: 3 .1 4 1 6
|
|
Area
|
is: 3.1416
|
|
Анализ
При обоих запусках в приведенном выше выводе пользователь вводил одинаковый ра диус, равный 1. Но при втором запуске пользователь решил изменить точность числа Пи,
следовательно, вычисленная площадь стала немного иной. Обратите внимание, что в обоих случаях в строке 22 и 25 происходит вызов той же функции. В строке 25 при вызове нет второго параметра, P i, поэтому для него в данном случае используется значение по умолчанию 3,14.
ПРИМЕЧАНИЕ
У функции может быть несколько параметров со значениями по умолчанию; но все они должны быть расположены в заключительной части списка пара метров.
Рекурсия — функция, вызывающая сама себя
некоторых случаях функция может фактически вызывать сама себя. Такая функция называется рекурсивной (recursive function). Обратите внимание, что у рекурсивной функ ции должно быть четко определенное условие выхода, когда она завершает работу и боль ше себя не вызывает.
Потребность в функциях 153
ВНИМАНИЕ! При отсутствии условия выхода или при ошибке в нем выполнение программы
погрязнет в рекурсивном вызове функции, которая непрерывно будет вызы
вать сама себя, пока в конечном счете не приведет к переполнению стека и аварийному завершению приложения.
Рекурсивные функции могут пригодиться при вычислении чисел прогрессии Фибонач чи, как представлено в листинге 7.5. Эта прогрессия начинается с двух чисел, 0 и 1:
F (0) = о
F(1) = 1
Значение каждого следующего числа последовательности — это сумма двух предыду щих чисел. Таким образом, энное значение последовательности (для п>1) определяется следующей (рекурсивной) формулой:
Fibonacci(n) = Fibonacci(п - 1) + Fibonacci(п - 2)
В результате прогрессия Фибоначчи расширяется до
F(2) = 1
F(3) = 2
F(4) = 3
F(5) = 5
F (6) = 8 и так далее.
ЛИСТИНГ 7.5. Использование рекурсивной функции для
вычисления чисел прогрессии Фибоначчи___________________________________________
#include
Do'stlaringiz bilan baham: |