Студопедия

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

КАТЕГОРИИ:

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






Функция 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.ru - Мои Лекции - 2015-2017 год. (0.007 сек.)