PYTHON. Функции и рекурсия. Функции — это такие участки кода, которые изолированы от остальнoй программы и выполняются только тогда, когда вызываются. Функции sqrt(), len() и print() обладают общим свойством: они могут принимать параметры (ноль, один или несколько), и они могут возвращать значение (хотя могут и не возвращать). Например, функция sqrt() принимает один параметр и возвращает значение (корень числа). Функция print() принимает переменное число параметров и ничего не возвращает.
Покажем, как написать функцию factorial(), которая принимает один параметр — число, и возвращает значение — факториал этого числа.
|
1 2 3 4 5 6 7 8 |
def factorial(n): res = 1 for i in range(1, n + 1): res *= i return res print(factorial(2)) print(factorial(4)) |
Теперь можно написать функцию max3(), которая принимает три числа и возвращает максимальное их них.
|
1 2 3 4 5 6 7 8 9 10 |
def max(a, b): if a > b: return a else: return b def max3(a, b, c): return max(max(a, b), c) print(max3(5, 9, 7)) |
Встроенная функция max() в Python может принимать переменное число аргументов и возвращать максимум из них. Приведём пример того, как такая функция может быть написана.
|
1 2 3 4 5 6 7 8 |
def max(*a): res = a[0] for val in a[1:]: if val > res: res = val return res print(max(5, 9, 7)) |
Локальные и глобальные переменные. Внутри функции можно использовать переменные, объявленные вне этой функции.
|
1 2 3 4 5 |
def f(): print(a) a = 1 f() |
Здесь переменной a присваивается значение 1, и функция f() печатает это значение, несмотря на то, что до объявления функции f эта переменная не инициализируется. В момент вызова функции f() переменной a уже присвоено значение, поэтому функция f() может вывести его на экран.
Такие переменные (объявленные вне функции, но доступные внутри функции) называются глобальными.
Рекурсия.
|
1 2 3 4 5 |
def short_story(): print("Мальчик письма написал") print("Маме, папе и сестре") print("И лишь потом он им сказал:") short_story() |
Как мы видели выше, функция может вызывать другую функцию. Но функция также может вызывать и саму себя! Рассмотрим это на примере функции вычисления факториала. Хорошо известно, что 0! = 1, 1! = 1. А как вычислить величину n! для большого n? Если бы мы могли вычислить величину (n-1)!, то тогда мы легко вычислим n!, поскольку n!=n⋅(n-1)!. Но как вычислить (n-1)!? Если бы мы вычислили (n-2)!, то мы сможем вычисли и (n-1)!=(n-1)⋅(n-2)!. А как вычислить (n-2)!? Если бы… В конце концов, мы дойдем до величины 0!, которая равна 1. Таким образом, для вычисления факториала мы можем использовать значение факториала для меньшего числа. Это можно сделать и в программе на Python:
|
1 2 3 4 5 6 7 |
def factorial(n): if n == 0: return 1 else: return n * factorial(n - 1) print(factorial(5)) |
Подобный прием (вызов функцией самой себя) называется рекурсией, а сама функция называется рекурсивной.
Примечание: Функция sqrt() — квадратный корень. Использование: sqrt(x); Функция len() — длина списка. Использование: len(x); Факториалом числа n называется произведение всех натуральных чисел, меньше или равныx n. Факториал обозначается n!
| n!=1⋅2⋅3…(n−1)⋅n |
ВАУ! ЭТО ГЕНИАЛЬНО! СПАСИБО! Я очень долго не понимала эту тему, только благодаря вам разобралась:)
Хороший урок. Думаю в будущем заняться программированием.