Почему код выводит сразу числа вот задание объясните пожалуйста
В классе Program напишите следующие методы и вызовите их в
главном методе Main:
1. Метод, с помощью которого вычисляется периметр и площадь
прямоугольного треугольника по введенным пользователем длинам
двух катетов a и b.
2. Метод, с помощью которого можно вывести на экран последовательность
n первых нечетных натуральных чисел. Количество чисел n пользователь
вводит с клавиатуры.
3. Метод, который создает и выводит на экран массив из n случайных целых
чисел в диапазоне от 0 до 100 (число n вводится с клавиатуры), а затем
подсчитывает произведение всех элементов массива.
using System;
class Program
{
static void Main()
{
CalculateThePerimeterAndArea(10,45);
ShowSequenceOfOddNumbers(5);
CreateAndShowArray(5);
}
static void CalculateThePerimeterAndArea(int a, int b)
{
Console.WriteLine(«S=» + (double)(a*b/2));
Console.WriteLine(«P=» + (double)(Math.Sqrt(a*a+b*b) + a + b));
}
static void ShowSequenceOfOddNumbers(int n)
{
for(int i = 1, c = 0; c < n; i++)
if (i % 2 != 0)
{
Console.Write(i + » «);
c++;
}
Console.WriteLine();
}
static void CreateAndShowArray(int n)
{
int[] a = new int[n];
long p = 1;
for (int i = 0; i < n; i++)
{
a[i] = new Random().Next(0, 100);
Console.Write(a[i] + » «);
p *= a[i];
}
Console.WriteLine();
Console.WriteLine(«Произведение=» + p);
}
}
Принцип работы программы заключается в вычислении факториала нечётных чисел на отрезке [1, 9].
Функция fact принимает один параметр — целое число n.
На выходе данная функция возвращает факториал n.
Рассмотрим работу функции:
Если n = 1, то функция без лишних вычислений возвращает 1, т.к факториал числа 1 = 1.
Иначе, если же параметр n не был равен 1, то мы умножаем n на рекурсивно вызываемую функцию fact, но уже от n — 1.
Т.е, если вызвать fact от числа 3, то произойдет следующее:
1) n = 3. n не равен 1, значит fact:=3 * fact(3 — 1); Факториал мы сейчас этот вычислить не можем, т.к не знаем, чему равен факториал от (n — 1), т.е fact(2)
2) Вызвали рекурсивно fact от n — 1, т.е fact(2); n = 2. n не равен 1, значит fact:=fact(2 — 1) * 2. Факториал мы сейчас этот вычислить не можем, т.к НА ЭТОМ ШАГЕ не знаем, чему равен факториал от (n — 1), т.е fact(1)
3) Вызвали рекурсивно fact от n — 1, т.е fact(1). n = 1, n == 1, значит fact:=1; И вот тут мы уже можем вычислять все факториалы из прошлых шагов.
Получаем:
2.1) fact(2) = 2 * fact(1) = 2 * 1 = 2;
1.1) fact(3) = 3 * fact(2) = 3 * 2 = 6.
Функция возвращает нам fact(n) и выходит из рекурсии.
Основная программа:
Пускаем цикл от 1 до 9 и если i у нас нечётное число, то печатаем факториал от i.
На выходе будет напечатано:
1 — fact(1), т.к 1 — нечетное число6 — fact(3), т.к 3 — нечетное число120 — fact(5), т.к 5 — нечетное число5040 — fact(7), т.к 7 — нечетное число362880 — fact(9), т.к 9 — нечетное число