Рекурсия C+

Изучение и применение рекурсии в языке С+. "Рекурсивное определение" понятия. Вычисление факториала наибольшего общего делителя методом Евклида. Рекуррентное соотношение между вычисляемыми в рекурсивном методе возвращающими и не возвращающими значениями.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 06.04.2020
Размер файла 1,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.Allbest.Ru/

Размещено на http://www.Allbest.Ru/

Размещено на http://www.Allbest.Ru/

Министерство образования и науки российской федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

Государственный университет

Институт прикладной математики и компьютерных наук

Кафедра вычислительной техники

Отчет по лабораторной работе

по дисциплине «Программирование»

Тема:

Рекурсия C#

Тула 2019

Цель работы

Изучить рекурсию в языке С#, научиться применять рекурсию для решения задач.

Теоретическая справка

Рекурсивным называют метод, если он вызывает сам себя в качестве вспомогательного. В основе рекурсивного метода лежит так называемое "рекурсивное определение" какого-либо понятия. Классическим примером рекурсивного метода является метод, вычисляющий факториал.

Метод с прямой рекурсией обычно содержит следующую структуру:

if (<условие>)

<оператор>;

else <вызов данного метода с другими параметрами>;

В качестве <условия> обычно записываются некоторые граничные случаи параметров, передаваемых рекурсивному методу, при которых результат его работы заранее известен, поэтому далее следует простой оператор или блок, а в ветви else происходит рекурсивный вызов данного метода с другими параметрами.

Со входом в рекурсию осуществляется вызов метода, а для выхода необходимо помнить точку возврата, т.е. то место программы откуда пришли и куда нужно будет возвратиться после завершения метода. Место хранения точек возврата называется стеком вызовов и для него выделяется определенная область оперативной памяти. В этом стеке запоминаются не только адреса точек возврата, но и копии значений всех параметров. По этим копиям восстанавливается при возврате вызывающий метод. При развертывании рекурсии за счет создания копий параметров возможно переполнение стека. Это является основным недостатком рекурсивного метода.

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

Любой рекурсивный метод можно преобразовать в обычный метод. И практически любой метод можно преобразовать в рекурсивный, если выявить рекуррентное соотношение между вычисляемыми в методе значениями. В общем случае рекурсивный метод включает в себя некоторое множество операторов и один или несколько операторов рекурсивного вызова. Действия могут выполняться после рекурсивного вызова, до рекурсивного вызова, а также и до, и после рекурсивного вызова существует еще и косвенная рекурсия, в которой метод вызывает себя в качестве вспомогательного не непосредственно, а через другой вспомогательный метод.

Рекурсия является средством решения многих задач: сортировки числовых массивов, обхода таких структур данных как деревья и графы.

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

Например, рекурсивный метод подсчета n-ного члена последовательности Фибоначчи. Данный метод будет работать неэффективно. FbR(17) вычисляется в ней как FbR(16) + FbR(15). В свою очередь FbR(16) вычисляется в ней как FbR(15) + FbR(14). Таким образом, FbR(15) будет вычисляться 2 раза, FbR(14) - 3 раза, FbR(13) - 5 раз и т.д. Всего для вычисления FbR(17) потребуется выполнить более тысячи операций сложения. Для сравнения при вычислении Fb(17), т.е. используя не рекурсивный метод, потребуется всего лишь 15 операций сложения.

Задание 1

Разработать рекурсивный метод (возвращающий значение) для нахождения наибольшего общего делителя методом Евклида

Рисунок 1 - Программа 1

Задание 2

Разработка рекурсивных методов (не возвращающих значений):

Дано натуральное число. Разработать рекурсивный метод для вывода на экран следующей картинки:

1 (1 раз)

222 (3 раза)

33333 (5 раз)

… (n раз)

33333 (5 раз)

222 (3 раза)

1 (1 раз)

Рисунок 2 - Программа 2

рекурсивный факториал делитель рекуррентный

Заключение

В ходе лабораторной работы изучили рекурсию в языке С#, научились применять рекурсию для решения задач.

Рисунок 3 - Программа 3

Листинг программы

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Lab06

{

class Program

{

static int F(int n)

{

if (n < 0) return n;

return F(n - 4)-F(-1);

}

static void Main(string[] args)

{

Console.Write("w = ");

int w = int.Parse(Console.ReadLine());

Console.WriteLine($"F(w) = {F(w)}");

Console.ReadLine();

}

}

}

Листинг программы

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Lab6_2

{

class Program

{

static int F(int n)

{

if (n <= 1) return n;

return F(n - 2) + F(n - 1);

}

static void Main(string[] args)

{

Console.Write("w = ");

int w = int.Parse(Console.ReadLine());

Console.WriteLine($"F(w) = {F(w)}");

Console.WriteLine(" " + F(w));

Console.ReadLine();

}

}

}

Результаты тестирования

Размещено на allbest.Ru


Подобные документы

  • Определение функции, ее прототип. Рекурсия - частичное определение объекта через себя. Рекурсивная функция произведения 2-х целых чисел. Задача о вычислении Факториала. Вычисление чисел Фибоначчи. Рекурсивное исполнение программы о Ханойских башнях.

    презентация [1,2 M], добавлен 20.05.2012

  • Использование рекурсии в предметных областях. Рекурсивные процедуры и функции в программировании. Создание алгоритмов для рисования графических изображений с использованием рекурсии в среде программирования Pascal ABC. Примеры рекурсии в графике.

    творческая работа [6,7 M], добавлен 01.02.2014

  • Исследование понятия рекурсии в программировании. Описание метода, который позволяет разбить задачу на части все меньшего и меньшего размера. Изучение схемы работы рекурсивной процедуры. Способы изображения древовидных структур. Избавление от рекурсии.

    презентация [486,1 K], добавлен 22.10.2013

  • Организация вычислительного процесса, при котором подпрограмма в ходе выполнения составляющих ее операторов обращается сама к себе. Способы программирования алгоритмов с использованием рекурсии. Преимущества и недостатки использования рекурсии.

    лабораторная работа [27,8 K], добавлен 28.05.2012

  • Модифицированный шифр Цезаря. Особенности алгоритмов Энигма и Виженера. Алгоритм рекурсивного вычисления наибольшего общего делителя. Генератор псевдослучайной последовательности. Шифрование мультипликативным ключом. Вычисление первообразного корня.

    лабораторная работа [1,0 M], добавлен 04.11.2014

  • Вычисление приближённых значений функций, представленных бесконечными рядами. Определение максимального элемента матрицы. Сортировка символов в порядке неубывания. Определение разности между первым и вторым значениями и вывод ее на экран как погрешность.

    контрольная работа [20,9 K], добавлен 17.04.2014

  • Составление алгоритма и программы для факторизации целого числа N с помощью ро-метода Полларда. Краткое описание данного метода: составление последовательности, вычисление разности и наибольшего общего делителя. Алгоритм работы и листинг программы.

    курсовая работа [12,1 K], добавлен 24.06.2010

  • История и суть задачи "Ханойские башни", построение ее математической модели в виде рекуррентного соотношения. Решение задачи с помощью рекурсии и кода Грея, ее связь с теорией графов. Анализ временных затрат. Различные головоломки с измененным условием.

    курсовая работа [1021,6 K], добавлен 06.08.2013

  • Краткая характеристика интегрированной среды Turbo Pascal. Принципы программирования разветвляющихся алгоритмов, циклических структур, задач обработки символьных данных, множеств. Правила записи данных в текстовый файл. Понятие явной и косвенной рекурсии.

    учебное пособие [1,5 M], добавлен 10.12.2010

  • Считать требуемую точность достигнутой, если модуль разности между текущим и следующим значениями суммы отличаются меньше, чем на коэффициент точности.

    лабораторная работа [124,3 K], добавлен 03.12.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.