Автор работы: Пользователь скрыл имя, 11 Декабря 2013 в 09:46, дипломная работа
Цель работы – рассмотрение методических аспектов преподавания рекурсии в школьном курсе информатики, которые позволят совершенствовать учебный процесс и послужат основой формирования информационной культуры учащихся.
Задачи могут быть сформулированы следующим образом:
1. Выявить роль рекурсии при обучении алгоритмизации в школьном курсе информатики.
2. Провести краткий анализ методов рекурсивного программирования в обучении решению прикладных задач.
3. Систематизировать существующий понятийный аппарат рекурсии в информатике с целью создания простого и ясного языка описания рекурсивных алгоритмов и процессов, а на его базе - методики обучения алгоритмизации на основе рекурсии.
Введение 3
Глава 1. Теоретические основы изучения рекурсии 5
1.1.Понятие рекурсии и ее виды 5
1.2. Методы рекурсивного программирования 14
Глава 2. Методика изучения основ рекурсии на уроках информатики 21
2.1. Методические рекомендации по изучению основ рекурсии 21
2.2. Методические разработки уроков по изучению основ рекурсии 35
Заключение 50
Литература 51
Обслуживание рекурсивных вызовов влечет определенные накладные расходы, но при этом рекурсивные алгоритмы, разработанные методом декомпозиции, имеют лучшие асимптотические оценки. Это означает, что, начиная с некоторой длины входа, достаточно часто соответствующей области практического использования, программная реализация рекурсивного алгоритма будет иметь лучшие временные показатели.
В настоящее время получила обоснование и является ведущей точка зрения, в соответствии с которой важнейшим направлением совершенствования структуры и содержания школьного курса информатики является усиление его общеобразовательной значимости. В общей структуре обучения информатике в школе, включающей три этапа (пропедевтический, базовый, профильный предпрофессиональный), основное общеобразовательное ядро должно быть сосредоточено в базовом курсе информатики. Это обуславливается необходимостью создания предпосылок для эффективного овладения учащимися различными средствами новых информационных технологий в процессе последующего профильного обучения информатике по какому-либо из направлений и подготовке их к практической деятельности, а также связями базового курса информатики с другими учебными предметами.
В методике преподавания информатики в школе отмечается большое значение обучения учащихся основам алгоритмизации.[14] Однако в значительной части программ и учебных пособий цели обучения, уровень и сфера приложения конкретных методических рекомендаций по основам алгоритмизации не реализуют общеобразовательный потенциал алгоритмизации. Одним из предлагаемых к рассмотрению методов, способствующих реализации дидактического принципа развивающего обучения, является разработка алгоритмических моделей на основе базовых понятий рекурсии.
Рекурсивные алгоритмы — инструмент развития стиля мышления. Постоянные упражнения по установлению причинно-следственных связей в моделях способствуют раскрытию аналитических способностей учащихся.[11] Понятие рекурсии просто для начального понимания и не связано с какими-либо специальными знаниями, поэтому рекурсивные методы рассматриваются уже в начальной школе на примере решения задачи о Ханойских башнях. Однако для дальнейшего изучения рекурсии в рамках базового и профильного курсов необходимо формирование понятийно-терминологического аппарата. Проблемы организации обучения алгоритмизации на основе рекурсии в вузе достаточно подробно рассмотрены в работах профессора А. Р. Есаяна [10], что явилось научной основой и позволило разработать понятийную базу рекурсии для одного из направлений профильного курса информатики средней школы
Оценка трудоемкости и эффективности рекурсивных алгоритмов средствами информатики позволяет ставить и решать задачу о поиске рациональных способов решения (следует отметить, что данное понятие зависит от требований к реализации алгоритма).[4] Традиционным примером неэффективного использования рекурсии является задача о вычислении элементов последовательности Фибоначчи, однако, при использовании динамической базы рекурсии трудоемкость алгоритма значительно снижается.
Высокая эффективность учебных занятий в рамках профильного обучения немыслима без организации самостоятельной познавательной деятельности учеников в течение всего урока и при подготовке домашних заданий. Творческий подход к решению задач рекурсивными способами, установление причинно-следственной связи между подзадачами, исторический или мифологический характер отдельных задач (задача Иосифа Флавия, задача о Ханойских башнях при n = 64), построение рекурсивных объектов графическими средствами (рекурсивное дерево, снежинки Коха и Мандельброта, кривые Серпинского) — все это может развивать интерес к обучению и стремление к самообразованию.
Более эффективному обучению информатике во многом способствует математическая подготовка учащихся [4]. Углубленное обучение математике формирует логическое и алгоритмическое мышление учеников, математические методы успешно применяются в моделировании. С другой стороны, информатика предоставляет комплекс компьютерных технологий, предназначенных для решения целых классов математических задач. Рекурсивные определения и алгоритмы представляют собой мощный аппарат и в математике. Мощность рекурсивного определения заключается в том, что оно позволяет с помощью конечного высказывания определить бесконечное множество объектов [9].
• Натуральные числа:
а) 1 есть натуральное число,
б) число, следующее за натуральным, есть натуральное число.
• Факториал неотрицательного целого числа:
а) 0!=1,
б) n>0; n! = n(n-1)!
• Моделирование арифметических операций (сумма первых n натуральных чисел):
а) Si = 1,
б) n>1; Sn = Sn-1 + n.
В следующих математических задачах разбиение задачи на подзадачи позволяет выявить рекурсивную зависимость и достаточно компактно оформить ее [4]. На предлагаемых моделях можно наглядно продемонстрировать изучение и закрепление основных понятий рекурсии.
• Вычисление биномиальных коэффициентов .
При нахождении биномиальных коэффициентов за основу принимается определение: или рассматриваются элементы треугольника Паскаля. Очевидно, что при больших n и m применение формулы непосредственно требует значительных вычислительных затрат (не говоря уже о построении треугольника Паскаля). Например, . И если учащиеся затрудняются преобразовать дробь посредством сокращения (или неверно сокращают), то правильный конечный ответ не достигается. В реализации данного алгоритма средствами Turbo-Pascal при вычислении факториалов чисел происходит выход за разрядную сетку типа Longint уже при n = 20. Если же предложить к рассмотрению зависимость между и через отношение
то может быть оформлена следующая рекурсивная зависимость:
а) ,
б) .
Следует обратить внимание учащихся на проведение параметризации задачи, выделение базы рекурсии и декомпозиции общего случая. Кроме того, предложенная модель является примером прямой рекурсии. Рекурсивная функция, разработанная в среде TurboPascal, вычисляет [11]
Function Binom (n,m : integer): Longint; Begin
if m = 0 then Binom := 1
else Binom := n * Binom (n-1, m-1) div m;
End;
• Нахождение наибольшего общего делителя (НОД) двух натуральных чисел с помощью алгоритма Евклида
Профильный курс математики предполагает изучение алгоритма Евклида в 8 классе, тогда как в обязательный минимум по математике данная тема не входит [4]. Прикладное же значение алгоритм Евклида получает при решении целых классов задач по информатике.
Пусть для определенности n > m и, по теореме о делении с остатком, Тогда имеет место рекурсивная зависимость:
а) если r = 0, то НОД (n, m) = m,
б) НОД (n, m) = НОД (m, r).
На примере рекурсивной функции Evklid_2 могут быть изучены или закреплены следующие понятия: отложенные вычисления, рекурсивный стек, глубина рекурсивных вызовов, предвычисления, прямой и обратный ход вычислений. Особенно выгодной является демонстрация работы программы в пошаговом режиме с отслеживанием значений переменных.
Function Evklid_2 (n,m : integer): integer;
Var k: integer;
Begin
if m > n then
begin
k := m;
m := n;
n := k;
end;
k := n mod m;
if k = 0 then Evklid_2 := m
else Evklid_2 := Evklid_2 (m, k);
End;
• Нахождение наибольшего общего делителя (НОД) n натуральных чисел
При проведении параметризации задачи учащимся целесообразно предложить провести исследование с целью нахождения НОД для 3, 4,.., n чисел и математически доказать полученный результат, а также обосновать выделение базы рекурсии и декомпозиции:
а) НОД (а1, а2)
б) НОД (а1, а2,..., аn) = НОД (НОД (аъ а2,..., аn-1), аn)
Пусть для определенности объявлен массивовый тип и глобальная переменная этого типа:
Const min = 1;
max = 20;
Type dim = array [min..max] of integer;
Var t: dim;
Разработанная функция Evklid_n является наглядным примером косвенной рекурсии, так как содержит в своем теле обращение к функции Evklid_2. Полезной также будет отработка следующих понятий: глубина рекурсивных вызовов, предвычисления, прямой и обратный ход вычислений, рекурсивные обращения в прямой и косвенной рекурсии.
Function Evklid_n (tab: dim; mi, ma: integer): integer;
Begin
if ma - mi = 1 then Evklid_n := Evklid_2 (tab[mi], tab[ma])
else Evklid_n := Evklid_n (tab, mi, ma - 1);
End;
• Перевод целых чисел из десятичной системы в систему счисления с основанием р
Профильный курс математики 9 класса предполагает знакомство учащихся с системами счисления и решение задач о переводе целых чисел между системами счисления с различными основаниями [8]. Пусть требуется перевести целое число m из десятичной в p-ичную систему счисления (для определенности ), то есть найти такое k, чтобы выполнялось равенство m10 = kp Результат математического моделирования задачи можно оформить в виде рекурсивной зависимости: а) если целая часть частного m и p равна нулю, то k = m,
б) k формируется из цифр целой части частного m и р, представленной в системе счисления с основанием р, и остатка от деления m на p.
Пусть в теле основной программы объявлена и определена глобальная строковая переменная alf := '0123456789ABCDEF'.
Рекурсивная функция System_p формирует строковую величину, являющуюся представлением десятичного числа m в р-ичной системе счисления для оговоренных ранее значений р.
Function System_p (m, p: integer): string;
Var mod_m, div_m: integer;
Begin
div_m := m div p;
if div_m = 0 then System_p := alf [m+1]
else begin
mod_m := m mod p;
System_p := System_p (div_m, p) + alf [mod_m+1];
end;
End;
• Перевод целых чисел из десятичной в Фибоначчиеву систему счисления
Стандартными в курсе информатики являются задачи о переводе чисел между системами счисления с постоянными основаниями [9]. Однако ряд прикладных задач оперирует системами счисления с переменным основанием, которое меняется по закономерности. Пусть требуется перевести целое число из десятичной системы счисления в такую, основание которой при переходе к старшему разряду изменяется в соответствии с рядом Фибоначчи: 1, 2, 3, 5, 8,... Алфавитом такой системы счисления являются два символа: 0 и 1, причем в записи числа символ 1 не может стоять в соседних разрядах, поскольку заполнение (k - 1)-го и k-го разрядов равносильно заполнению разряда (k + 1).
На подготовительном этапе полезно рассмотреть с учащимися задачи о переводе целых чисел между системами счисления с постоянным основанием и о вычислении n-го члена последовательности Фибоначчи через формирование динамической базы рекурсии и сокращение числа отложенных вычислений (данный пример к тому же наглядно иллюстрирует снижение трудоемкости рекурсивного алгоритма).
Пусть для определенности объявлен массивовый тип и необходимые глобальные переменные.
Const min = 1;
max = 20;
Type dim_fib = array [min-1..max] of longint;
Var f: dim_fib;
ind: min-1..max;
Dig : longint; {десятичная запись переводимого числа}
Function Fib (n: integer): longint;
Begin
if ind < n then
begin
if n = 1 then f[n] := 1
else f[n] := Fib(n - 2) + Fib(n - 1); ind := n;
end;
Fib := f[n];
End;
Пусть в теле основной программы объявлена и определена глобальная строковая переменная Raz := '10000000000000000000', соответствующая двадцатизнаковой разрядной единице системы Фибоначчи и найдено фактическое значение параметра index, равное порядковому номеру ближайшего элемента последовательности, не превосходящего данного числа Dig.
Рекурсивная функция System_fib обобщает понятия прямой и косвенной рекурсии, так как содержит обращения к самой себе, а также к ранее рассмотренной функции Fib.
Function System_fib (n, index: integer): string;
Begin
if Fib (index) = n then System_fib := Copy (Raz, 1, index)
if Fib (index) > n then System_fib := '0' + System_fib (n, index-1)
Информация о работе Методические аспекты преподавания основ рекурсии