Similar presentations:
Лекция_6_2
1. АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ
12. Локальные функции
Локальные функции представляют функции, определенные внутридругих методов. Локальная функция, как правило, содержит действия,
которые применяются только в рамках ее метода.
using System;
class HelloWorld
{
static void Compare(int[] numbers1, int[] numbers2)
{
int numbers1Sum = Sum(numbers1);
int numbers2Sum = Sum(numbers2);
if (numbers1Sum > numbers2Sum)
Console.WriteLine("сумма чисел из массива numbers1 больше");
else
Console.WriteLine("сумма чисел из массива numbers2 больше");
int Sum(int[] numbers)
{
int result = 0;
foreach (int number in numbers)
result += number;
2
return result; } }
3. Локальные функции
static void Main(){
int[] numbers1 = { 1, 2, 3 };
int[] numbers2 = { 3, 4, 5, 6, 7 };
Compare(numbers1, numbers2);
}
}
3
4. Локальные функции
using System;class HelloWorld
{
static int Sum(int[] numbers)
{
int limit = 0;
int result = 0;
foreach (int number in numbers)
{
if (IsPassed(number)) result += number;
}
return result;
bool IsPassed(int number)
{
return number > limit;
}
}
static void Main()
{
int[] numbers1 = { -3, -2, -1, 0, 1, 2, 3 };
int[] numbers2 = { 3, -4, 5, -6, 7 };
Console.WriteLine(Sum(numbers1));
Console.WriteLine(Sum(numbers2));
}
}
4
5. Локальные функции
Статические локальные функцииЛокальные функции могут быть статическими. Такие функции определяются с помощью
ключевого слова static. Их особенностью является то, что они не могут обращаться к
переменным окружения, то есть метода, в котором статическая функция определена.
static int Sum(int[] numbers)
{
int result = 0;
int limit = 0;
foreach (int number in numbers)
{
if (IsPassed(number, limit)) result += number;
}
return result;
static bool IsPassed(int number, int lim)
{
//return number > limit; // Ошибка: метод IsPassed не имеет доступа к
переменной limit
return number > lim;
}
}
5
6. Возвращение значения из switch
Конструкция switch позволяет возвращать некоторое значение.возвращения значения в блоках case может применятся оператор return.
int DoOperation(int op, int a, int b)
{
switch (op)
{
case 1: return a + b;
case 2: return a - b;
case 3: return a * b;
default: return 0;
}
}
int result1 = DoOperation(1, 10, 5); // 15
Console.WriteLine(result1);
// 15
int result2 = DoOperation(3, 10, 5); // 50
Console.WriteLine(result2);
// 50
Для
int DoOperation(int op, int a, int b)
{
int result = op switch {
1 => a + b,
2 => a - b,
3 => a * b,
_ => 0
};
return result;
}
_______________________________________
int DoOperation(int op, int a, int b)
{
return op switch
{
1 => a + b,
2 => a - b,
3 => a * b,
_ => 0
};
6
7. Рекурсивные функции
Рекурсивная функция представляет такую конструкцию, при которой функциявызывает саму себя.
При создании рекурсивной функции в ней обязательно должен быть
некоторый базовый вариант, с которого начинается вычисление функции.
Для возвращения базового варианта применяется оператор return.
Все рекурсивные вызовы должны обращаться к подфункциям, которые в конце
концов сходятся к базовому варианту:
int Factorial(int n)
{
if (n == 1) return 1;
return n * Factorial(n - 1);
}
int factorial4 = Factorial(4); // 24
int factorial5 = Factorial(5); // 120
int factorial6 = Factorial(6); // 720
Console.WriteLine($"Факториал числа 4 = {factorial4}");
Console.WriteLine($"Факториал числа 5 = {factorial5}");
Console.WriteLine($"Факториал числа 6 = {factorial6}");
7
8. Рекурсивные функции
int Fibonachi(int n){
if (n == 0 || n == 1) return n;
return Fibonachi(n - 1) + Fibonachi(n - 2);
}
int fib4 = Fibonachi(4);
int fib5 = Fibonachi(5);
int fib6 = Fibonachi(6);
Console.WriteLine($"4 число Фибоначчи = {fib4}");
Console.WriteLine($"5 число Фибоначчи = {fib5}");
Console.WriteLine($"6 число Фибоначчи = {fib6}");
8
programming