Рекурсивные функции
презентация урока для интерактивной доски по информатике и икт (11 класс)
Предварительный просмотр:
Подписи к слайдам:
1. Функции в математике факториал числа n определяется как n! = 1 ⋅ 2 ⋅ ... ⋅ n. Например, 5! = 1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ 5 = 120. Ясно, что факториал можно легко посчитать, воспользовавшись циклом for. Представим, что нам нужно в нашей программе вычислять факториал разных чисел несколько раз (или в разных местах кода). Конечно, можно написать вычисление факториала один раз, а затем используя Copy-Paste вставить его везде, где это будет нужно.
если мы ошибёмся один раз в начальном коде, то потом эта ошибка попадёт в код во все места, куда мы скопировали вычисление факториала. Да и вообще, код занимает больше места, чем мог бы. Чтобы избежать повторного написания одной и той же логики, в языках программирования существуют функции. Функции — это такие участки кода, которые изолированы от остальной программы и выполняются только тогда, когда вызываются. Вы уже встречались с функциями sqrt(), len() и print().
Функция factorial() , которая принимает один параметр — число, и возвращает значение — факториал этого числа.
Код функции должен размещаться в начале программы , вернее, до того места, где мы захотим воспользоваться функцией factorial(). factorial — идентификатор, то есть имя нашей функции . После идентификатора в круглых скобках идет список параметров , которые получает наша функция. Список состоит из перечисленных через запятую идентификаторов параметров. В нашем случае список состоит из одной величины n. В конце строки ставится двоеточие. Далее тело функции , оформленное в виде блока, то есть с отступом. Внутри функции вычисляется значение факториала числа n и оно сохраняется в переменной res . Функция завершается инструкцией return res , которая завершает работу функции и возвращает значение переменной res .
Инструкция return может встречаться в произвольном месте функции, ее исполнение завершает работу функции и возвращает указанное значение в место вызова. Если функция не возвращает значения, то инструкция return используется без возвращаемого значения. В функциях, которым не нужно возвращать значения, инструкция return может отсутствовать.
2. Локальные и глобальные переменные Внутри функции можно использовать переменные, объявленные вне этой функции
Будут выведены числа 1 и 0. Несмотря на то, что значение переменной a изменилось внутри функции, вне функции оно осталось прежним! Это сделано в целях “защиты” глобальных переменных от случайного изменения из функции. Например, если функция будет вызвана из цикла по переменной i, а в этой функции будет использована переменная i также для организации цикла, то эти переменные должны быть различными. Если вы не поняли последнее предложение, то посмотрите на следующий код и подумайте, как бы он работал, если бы внутри функции изменялась переменная i.
Итак, если внутри функции модифицируется значение некоторой переменной, то переменная с таким именем становится локальной переменной, и ее модификация не приведет к изменению глобальной переменной с таким же именем. Более формально: интерпретатор Питон считает переменную локальной для данной функции, если в её коде есть хотя бы одна инструкция, модифицирующая значение переменной, то эта переменная считается локальной и не может быть использована до инициализации. Инструкция, модифицирующая значение переменной — это операторы =, +=, а также использование переменной в качестве параметра цикла for. При этом даже если инструкция, модицифицирующая переменную никогда не будет выполнена, интерпретатор это проверить не может, и переменная все равно считается локальной.
Лучше не изменять значения глобальных переменных внутри функции. Если ваша функция должна поменять какую-то переменную, пусть лучше она вернёт это значением, и вы сами при вызове функции явно присвоите в переменную это значение. Если следовать этим правилам, то функции получаются независимыми от кода, и их можно легко копировать из одной программы в другую.
функция может вызывать другую функцию. Но функция также может вызывать и саму себя! Рассмотрим это на примере функции вычисления факториала. Хорошо известно, что 0!=1, 1!=1. А как вычислить величину n! для большого n?
По теме: методические разработки, презентации и конспекты
Понятие рекурсии. Построение рекурсивных алгоритмов в среде исполнителя
Открытый урок по теме "Алгоритмизация" для 9-х классов. К описанию урока приложена презентация с примерами результатов работы рекурсивных алгоритмов в среде "kTurtle" и подробное описание хода урока (...
Как научить школьника писать рекурсивные процедуры: задача о ферзях
Умение создавать и использовать рекурсивные процедуры – неотъемлемая часть подготовки школьников к успешному выступлению на олимпиадах по программированию. Как научить школьника программировать с испо...
Обучение приемам рекурсивного программирования: задача о шахматном коне
Умение разрабатывать рекурсивные процедуры – важное и необходимое умение для участника олимпиады по программированию. Эта область программирования, несомненно, является одной из самых сложных. Вместе ...
Рекурсивные процедуры и функции как инструмент развития алгоритмического мышления школьников
На наш взгляд, умение создавать грамотные рекурсивные процедуры и функции является необходимой и вместе с тем одной из самых труднопреодолимых степеней на пути к вершинам искусства программирования. И...
Подготовка школьников к олимпиадам по программированию: рекурсивные процедуры
Предлагается пример задачи и вариант ее решения с помощью рекурсивного алгоритма. Обсуждаются проблемы подготовки школьников к олимпиадам по программированию....
Презентация для подготовки к ЕГЭ по информатике по теме "Рекурсивные алгоритмы"
Презентация на тему "Рекурсивные алгоритмы" создана для подготовки обучающихся к ЕГЭ по информатике и ИКТ. В работе рассмотрено определение рекурсии, приведены примеры рекурсивно-определенных графичес...
Рекурсивные функции
Разбор заданий ЕГЭ по материалам К.Ю. Полякова...