Студопедия

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

Разделы сайта

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






Пример построения функции






#include < iostream> using namespace std; void function_name (){ std:: cout < < " Hello, world" < < std:: endl; } int main(){ function_name(); // Вызов функции return 0; }

В данном случае это делается так: function_name();. Вызов функции имеет вид имени функции с последующими круглыми скобками. Эти скобки могут быть пустыми, если функция не имеет аргументов. Если же аргументы в самой функции есть, их необходимо указать в круглых скобках.

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

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

 

 

РЕКУРСИВНАЯ ФУНКЦИЯ

В программировании рекурсия тесно связана с функциями, точнее именно благодаря функциям в программировании существует такое понятие как рекурсия или рекурсивная функция. Простыми словами, рекурсия – определение части функции (метода) через саму себя, то есть это функция, которая вызывает саму себя, непосредственно (в своём теле) или косвенно (через другую функцию). Типичными рекурсивными задачами являются задачи: нахождения n!, числа Фибоначчи. Такие задачи мы уже решали, но с использованием циклов, то есть итеративно. Вообще говоря, всё то, что решается итеративно можно решить рекурсивно, то есть с использованием рекурсивной функции. Всё решение сводится к решению основного или, как ещё его называют, базового случая. Существует такое понятие как шаг рекурсии или рекурсивный вызов. В случае, когда рекурсивная функция вызывается для решения сложной задачи (не базового случая) выполняется некоторое количество рекурсивных вызовов или шагов, с целью сведения задачи к более простой. И так до тех пор пока не получим базовое решение. Разработаем программу, в которой объявлена рекурсивная функция, вычисляющая n!

  • MVS
  • Code:: Blocks
  • Dev-C++
  • QtCreator
  // factorial.cpp: определяет точку входа для консольного приложения.   #include " stdafx.h" #include < iostream> using namespace std;   unsigned long int factorial(unsigned long int); // прототип рекурсивной функции int i = 1; // инициализация глобальной переменной для подсчёта кол-ва рекурсивных вызовов unsigned long int result; // глобальная переменная для хранения возвращаемого результата рекурсивной функцией   int main(int argc, char* argv[]) { int n; // локальная переменная для передачи введенного числа с клавиатуры cout < < " Enter n!: "; cin > > n; cout < < n < < "! " < < " =" < < factorial(n) < < endl; // вызов рекурсивной функции system(" pause"); return 0; }   unsigned long int factorial(unsigned long int f) // рекурсивная функция для нахождения n! { if (f == 1 || f == 0) // базовое или частное решение return 1; // все мы знаем, что 1! =1 и 0! =1 cout < < " Step\t" < < i < < endl; i++; // операция инкремента шага рекурсивных вызовов cout < < " Result= " < < result < < endl; result = f * factorial(f - 1); // функция вызывает саму себя, причём её аргумент уже на 1 меньше return result; }

 

Вычислить факториал числа n.

Для справки: «Факториалом числа N называют произведение всех натуральных чисел от 1 до N»

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include " stdafx.h" #include < iostream> using namespace std; long int factorial(int n) { if (n< =1) return (n); else return(n*factorial(n-1)); } int main () { int i; long int f; cout< < " i="; cin> > i; f=factorial(i); cout< < i< < "! =" < < f< < endl; system(" pause"); return 0; }

 

ПЕРЕГРУЗКА ФУНКЦИЙ






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.