Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 3

.docx
Скачиваний:
0
Добавлен:
15.03.2025
Размер:
639.51 Кб
Скачать

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

«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

Кафедра комплексной информационной безопасности электронно-вычислительных систем (КИБЭВС)

Рекурсия. Типы рекурсий

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

по дисциплине «Языки программирования»

Вариант №11

Студент гр. 723-1

_______

__.__.2025

Руководитель

младший научный сотрудник

_______ А.В. Куртукова

__.__.2025

Введение

Цель работы:

Изучение различных типов рекурсий и способов их применения для решения практических задач.

Задание

1. Изучить краткие теоретические сведения.

2. Разработать программу или комплекс программ, реализующих все типы рекурсий на одном из языков программирования (см. Варианты языков).

3. Реализовать индивидуальное задание, соответствующее своему варианту.

4. Написать отчет и защитить у преподавателя.

  1. ОСНОВНЫЕ ВИДЫ РЕКУРСИИ

На рисунках 1.1-1.10 представлены основные виды рекурсии реализованные на языке программирования C# с результатами работы кодов.

Рисунок 1.1 – Линейная рекурсия

Рисунок 1.2 – Результат работы линейной рекурсии

Рисунок 1.3 – Повторная рекурсия

Рисунок 1.4 – Результат работы повторной рекурсии

Рисунок 1.5 – Взаимная рекурсия

Рисунок 1.6 – Результат работы взаимной рекурсии

Рисунок 1.7 – Каскадная рекурсия

Рисунок 1.8 – Результат работы каскадной рекурсии

Рисунок 1.9 – Удаленная рекурсия

Рисунок 1.10 – Результат работы удаленной рекурсии

2 задание по варианту

На рисунке 2.1 представлено задание по варианту 11

Рисунок 2.1 – Задание по варианту

По данному заданию была составлена программа на C#. Программа и вывод представлена на рисунке 2.2

Рисунок 2.2 – Программа и результат выполнения

На рисунке 2.3 представлены результаты работы программы.

Рисунок 2.3 – Результаты работы программы

Заключение

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

Приложение А

//1. Линейная рекурсия - сумма чисел

/*using System;

public class RecursiveFunctions

{

public static int LinearRecursion(int n)

{

if (n < 10)

{

return n;

}

else

{

return n % 10 + LinearRecursion(n / 10);

}

}

public static void Main(string[] args)

{

Console.WriteLine("Линейная рекурсия:");

Console.Write("Номер: ");

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

Console.WriteLine(LinearRecursion(n));

Console.WriteLine();

}

}*/

//2. Повторная рекурсия - сколько раз можно из А вычесть Б

using System;

public class RecursiveFunctions

{

public static int RepeatedRecursion(int a, int b, int k)

{

if (a >= b)

{

return RepeatedRecursion(a - b, b, k + 1);

}

else

{

return k;

}

}

public static void Main(string[] args)

{

Console.WriteLine("Повторная рекурсия:");

Console.Write("Номер 1: ");

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

Console.Write("Номер 2: ");

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

int k = RepeatedRecursion(a, b, 0);

Console.WriteLine(k);

Console.WriteLine();

}

}

//3. Взаимная рекурсия - четность\нечетность

/*using System;

public class RecursiveFunctions

{

public static string Vzaim1(int b2)

{

if (b2 == 0)

{

return "Четное число";

}

else

{

return Vzaim2(b2 - 1);

}

}

public static string Vzaim2(int b2)

{

if (b2 == 0)

{

return "Нечетное число";

}

else

{

return Vzaim1(b2 - 1);

}

}

public static void Main(string[] args)

{

Console.WriteLine("Взаимная рекурсия:");

Console.Write("Номер: ");

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

string result = Vzaim1(n);

Console.WriteLine(result);

Console.WriteLine();

}

}*/

//4. Каскадная рекурсия - количество сочетаний

/*using System;

public class RecursiveFunctions

{

public static int Kask(int n, int m)

{

if (((m == 0) && (n > 0)) || ((m == n) && (n > 0)))

{

return 1;

}

else if ((m > n) && (n >= 0))

{

return 0;

}

else

{

return Kask(n - 1, m - 1) + Kask(n - 1, m);

}

}

public static void Main(string[] args)

{

Console.WriteLine("Каскадная рекурсия:");

Console.Write("Номер1: ");

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

Console.Write("Номер2: ");

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

int result = Kask(n, m);

Console.WriteLine(result);

Console.WriteLine();

}

}*/

//5. Удаленная рекурсия - функция аккермана

/*using System;

public class RecursiveFunctions

{

public static int FarRecursion(int n, int m)

{

if (n == 0)

{

return m + 1;

}

if (m == 0)

{

return FarRecursion(n - 1, 1);

}

if (m != 0 && n != 0)

{

return FarRecursion(n - 1, FarRecursion(n, m - 1));

}

return 0;

}

public static void Main(string[] args)

{

Console.WriteLine("Удаленная рекурсия:");

Console.Write("Номер 1: ");

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

Console.Write("Номер 2: ");

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

int result = FarRecursion(n, m);

Console.WriteLine("Результат: " + result);

Console.WriteLine();

}

}*/

//Индивидуальное задание

/*using System;

public class RecursiveMaxFinder

{

public static int FindMaxRecursive(int[] arr, int start, int end)

{

// Базовый случай: один или два элемента

if (end - start <= 2)

{

if (end - start == 1) return arr[start]; // один элемент

return Math.Max(arr[start], arr[end - 1]); //два элемента

}

// Разделение массива на приблизительно 1/3 и 2/3

int oneThird = (end - start) / 3;

int firstThirdEnd = start + oneThird;

// Рекурсивные вызовы

int maxFirstThird = FindMaxRecursive(arr, start, firstThirdEnd);

int maxRest = FindMaxRecursive(arr, firstThirdEnd, end);

// Возвращение максимального значения

return Math.Max(maxFirstThird, maxRest);

}

public static void Main(string[] args)

{

Console.WriteLine("Введите размер массива:");

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

int[] arr = new int[n];

Console.WriteLine("Введите элементы массива:");

for (int i = 0; i < n; i++)

{

arr[i] = int.Parse(Console.ReadLine());

}

if (n == 0)

{

Console.WriteLine("Массив пуст. Максимального элемента нет.");

}

else

{

int max = FindMaxRecursive(arr, 0, n);

Console.WriteLine($"Максимальный элемент: {max}");

}

}

}*/

Томск 2025

Соседние файлы в предмете Языки программирования