Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Функция term_of_series






 
 

 

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. Таблица переменных:

Имя Тип Назначение
n int Количество суммируемых членов ряда
x double Значение аргумента
sum double Сумма членов ряда

7. Выводы:

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

Все функции языка С++ (кроме функции main) могут быть использованы для построения рекурсии.

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

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

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


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

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал