Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Функция term_of_series ⇐ ПредыдущаяСтр 2 из 2
5. Текст программы:
#include < conio.h> #include < iostream.h> #include < math.h>
// объявление прототипов функций // функция вычисления суммы ряда double sum_of_series(double x, int k, int n); // функция вычисления члена ряда double term_of_series(double x, int k);
void main() { int n; // количество суммируемых членов ряда double x, // значение аргумента sum; // сумма членов ряда
clrscr();
cout < < " Введите значение аргумента 'x': "; cin > > x; if (x*x> 1) { cout < < " Нет решения: "; return; } cout < < " Введите количество членов ряда 'n': "; cin > > n;
// вычисление суммы ряда sum = sum_of_series(x, 1, n); cout < < " Сумма членов ряда: " < < sum < < endl;
getch(); return; }
// рекурсивная функция вычисления суммы ряда double sum_of_series(double x, int k, int n) { if (k < = n) { // вычисление суммы return (term_of_series(x, k) +sum_of_series(x, k + 1, n)); } else { // прекращаем вычисления суммы, если количество членов // ряда превысило заданное количество return 0; } }
// функция вычисления члена ряда double term_of_series(double x, int k) { double result = 0;
result = k * pow(x, k); cout < < " Член ряда: " < < k < < " Значение: " < < result < < endl; return result; }
6. Таблица переменных:
7. Выводы: Ситуацию, когда функция тем или иным образом вызывает саму себя, называют рекурсией. Рекурсия, когда функция обращается сама к себе непосредственно, называется прямой; в противном случае она называется косвенной. Все функции языка С++ (кроме функции main) могут быть использованы для построения рекурсии. В тексте рекурсивной функции обязательно должен быть выполнен условный оператор, например if, который при определенных условиях вызовет завершение функции, т.е. возврат, а не выполнит очередной рекурсивный вызов. Если такого оператора нет, то после вызова функция никогда не сможет завершить работы. Распространенной ошибкой при написании рекурсивных функций как раз и является отсутствие в них условного оператора. Обработка вызова рекурсивной функции в принципе ничем не отличается от вызова функции обычной: перед вызовом функции в стек помещаются её аргументы, затем адрес точки возврата, затем, уже при выполнении функции — автоматические переменные, локальные относительно этой функции. Но если при вызове обычных функций число обращений к ним невелико, то для рекурсивных функций число вызовов и, следовательно, количество данных, размещаемых в стеке, определяется глубиной рекурсии. Поэтому при рекурсии может возникнуть ситуация переполнения стека. Главным преимуществом рекурсивных функций является то, что с их помощью упрощается реализация некоторых алгоритмов, а программа становится понятнее.
|