[email protected] Луцкая Т.Ю. ГБОУ СОШ 2107 Учитель информатики высшей категории, эксперт ЕГЭ Рекурсия. ́ сия заключается в определении, Рекур описании, изображении какого-либо объекта или процесса внутри самого этого объекта или процесса, то есть ситуация, когда объект является частью самого себя. Рекурсивная функция Вычисление факториала Числа Эйлера Пример F(1) = 1; F(2) = 1; F(3) = F(1)*3 = 1*3 = 3 F(4) = F(2)*4 = 1*4 = 4 F(5) = F(3)*5 = 3*5 = 15 F(6) = F(4)*6 = 4*6 = 24 F(7) = F(5)*7 = 15*7 = 105 Рекурсия в программировании В программировании рекурсия — вызов функции (процедуры) из неё же самой. Реализация рекурсивных вызовов функций опирается на механизм стека вызовов — адрес возврата и локальные переменные функции записываются в стек, благодаря чему каждый следующий рекурсивный вызов этой функции пользуется своим набором локальных переменных и за счёт этого работает корректно. F(5) n=5 F(-1) ‘5’ ‘-1’ F(-2) F(4) n=4 ‘4’ F(2) ‘2’ F(1) ‘1’ ‘-2’ F(0) ‘0’ F(-2) F(3) F(1) F(0) ‘1’ n=3 ‘3’ F(2) n=2 ‘2’ F(0) ‘0’ ‘-2’ ‘0’ F(1) F(-1) ‘-1’ F(-2) ‘-2’ n=1 ‘1’ F(0) n=0 ‘0’ 5 4 3 2 1 0 -2 -1 0 1 0 -2 2 1 0 -2 -1 F(5) n=5 Знач = F(4) + Знач = F(3) n=3 Знач = F(2) n=4 n=2 + =4 + n=1 F(1) =3 Знач = 1 n=3 Знач = F(2) =5 Знач = 1 Знач = 1 Знач = F(3) F(1) + F(1) n=2 n=1 Знач = 1 Знач = 1 =2 Разработка стратегии Задача типа 26 Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. Выигрывает игрок, после хода которого количество камней в куче становится более 22. В начальный момент в куче было S камней, 1 ≤ S ≤ 22. При каких S: 1. Петя гарантированно выигрывает своим первым ходом; 2. Ваня гарантированно выигрывает своим первым ходом; 3. Петя гарантированно выигрывает своим вторым ходом; 4. Ваня гарантированно выигрывает своим вторым ходом. + 1; * 2; S > 22 1. 23 / 2 = 12 12 22 23 При 12 S 22 Петя выигрывает первым ходом, выполнив команду * 2 2. 11 * 2 = 22 11 + 1 = 12 10 11 12 22 10 + 1 = 11 При S = 11 Ваня выигрывает своим первым ходом П+1 12 П*2 22 В*2 24 11 В+1 23 S = 11 – 1 = 10 При S = 10 Петя выигрывает своим вторым или первым ходом 3. 10 П+1 В+1 12 В*2 22 П*2 24 11 П+1 23 S = 10 – 1 = 9; При S = 9 Ваня выигрывает своим вторым или первым ходом 4. П+1 9 П*2 10 В+1 18 П*2 22 В*2 24 11 36 В*2 П+1 12 В+1 23 Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в два раза. ПРОИГРЫВАЕТ игрок, после хода которого количество камней в куче становится более 22. В начальный момент в куче было S камней, 1 ≤ S ≤ 22. При каких S: 1. Петя гарантированно выигрывает своим первым ходом после первого хода Вани; 2. Ваня гарантированно выигрывает своим первым ходом после второго хода Пети; 3. Петя гарантированно выигрывает своим вторым ходом после второго хода Вани; 4. Ваня гарантированно выигрывает своим вторым ходом после третьего хода Пети; 1. 22 / 2 = 11 22 - 1 = 21 11 11 21 П *2 П +1 21 В+1 23 В*2 44 22 В+1 23 В*2 44 22 Петя выигрывает первым ходом при S = 11 или S = 21. 22 2. Ваня выигрывает первым ходом при S = 20. П +1 21 20 П *2 40 В +1 П+1 23 П*2 44 22 3. Петя выигрывает вторым или первым ходом при S = 19 или S = 10. 19 П +1 В +1 10 В +1 В*2 44 В+1 23 В*2 44 40 21 20 В *2 23 22 20 В *2 П *2 21 П +1 В+1 40 П +1 22 4. Ваня выигрывает вторым или первым ходом при S = 18 . 19 П +1 36 21 22 П*2 20 П *2 18 П *2 В +1 П +1 В +1 П+1 40 44 Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может забрать из кучки один камень или половину камней. Выигрывает игрок, который забрал последний камень. В начальный момент в куче было S камней. При каких S: 1. Петя гарантированно выигрывает своим первым ходом; 2. Ваня гарантированно выигрывает своим первым ходом; 3. Петя гарантированно выигрывает своим вторым ходом; 4. Ваня гарантированно выигрывает своим вторым ходом. 1. Петя выигрывает первым при S = 1, выполнив команду – 1 . При S > 1 забрать за один ход последний камень Петя не сможет. 2. Ваня выигрывает своим первым при S = 2. 1 В -1 П :2 0 2 П -1 1 В -1 0 3. Петя выигрывает своим вторым ходом при S = 3 или S = 4 . 1 3 П -1 1 0 В :2 2 4 В -1 4. П -1 1 П /2 В :2 В -1 Ваня выигрывает своим вторым ходом при S = 5 . 1 5 П -1 4 В /2 В -1 П :2 2 П -1 0 2 0 П -1 П -1 1 В -1 1 П -1 0 Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может забрать из кучки один камень или половину камней. Проигрывает игрок, который забрал последний камень. В начальный момент в куче было S камней. При каких S: 1. Петя гарантированно выигрывает своим первым ходом после первого хода Вани; 2. Ваня гарантированно выигрывает своим первым ходом после второго хода Пети; 3. Петя гарантированно выигрывает своим вторым ходом после второго хода Вани; 4. Ваня гарантированно выигрывает своим вторым ходом после третьего хода Пети 1. 2. Петя выигрывает первым при S = 2, выполнив команду – 1 или : 2. При S > 2 Петя не сможет выиграть за один свой ход. Ваня выигрывает своим первым при S = 3. П -1 3 3. 2 В /2 П -1 1 0 Петя выигрывает своим вторым ходом при S = 6 или S = 4 . 4 6 4. П -1 3 П/2 3 В /2 2 В /2 2 П -1 1 П -1 1 В -1 0 В -1 0 Ваня выигрывает своим вторым ходом при S = 5 . 5 П -1 4 В-1 3 П -1 2 В -1 1 П -1 0 Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может выполнить одну из команд: 1 – забрать из кучки один камень; 2 – забрать 2; 3 – оставить целую часть от деления на2, но забрать > 0. Выигрывает игрок, который забрал последний камень. В начальный момент в куче было S камней. При каких S: 1. Петя гарантированно выигрывает своим первым ходом; 2. Ваня гарантированно выигрывает своим первым ходом; 3. Петя гарантированно выигрывает своим вторым ходом; 4. Ваня гарантированно выигрывает своим вторым ходом. 1. 2. Петя выигрывает первым при S = 2, выполнив команду – 2, или S = 1, выполнив команду – 1. При S > 2 Петя не сможет выиграть за один свой ход. Ваня выигрывает своим первым при S = 3. 2 П -1 В–2 3 В–1 П - 2 или /2 3. 1 Петя выигрывает своим вторым ходом при S = 7, 6, 5 или 4 . В -1 7 П /2 2 П–2 3 В - 2 или /2 П–1 1 В -1 6 П /2 3 В - 2 или /2 В -1 5 П–2 В -1 П–1 П–1 1 2 П–2 3 В - 2 или /2 4 2 П–2 П–1 1 2 П–2 3 В - 2 или /2 П–1 1 4. Ваня выигрывает своим вторым ходом при S = 8 . В/2 П -1 2 В–2 3 6 В - 2 или /2 В–1 1 П–2 П -1 П–1 8 7 В/2 3 В - 2 или /2 П /2 В–1 4 2 В–2 П -1 В–1 1 2 В–2 3 П - 2 или /2 В–1 1 Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может выполнить одну из команд: 1 – забрать из кучки один камень; 2 – забрать 2; 3 – оставить целую часть от деления на2, но забрать > 0. Проигрывает игрок, который забрал последний камень. В начальный момент в куче было S камней. При каких S: 1. Петя гарантированно выигрывает своим первым ходом после первого хода Вани; 2. Ваня гарантированно выигрывает своим первым ходом после второго хода Пети; 3. Петя гарантированно выигрывает своим вторым ходом после второго хода Вани; 4. Ваня гарантированно выигрывает своим вторым ходом после третьего хода Пети. 1. 2. Петя выигрывает первым при S = 3 , выполнив команду – 2, или S = 2, выполнив команду – 1. При S > 3 Петя не сможет выиграть за один свой ход. Ваня выигрывает своим первым при S = 4. П -1 3 В–2 П -1 1 0 4 П - 2 или /2 П -1 В–1 2 1 0 3. Петя выигрывает своим вторым ходом при S = 5, 6, 8, 9 . 5 8 4. П -1 П /2 П. 2 4 6 П. 2 4 9 П -2 П /2 4 4 Ваня выигрывает своим вторым ходом при S = 10 . П -1 10 9 П. 3 П /2 5 П. 3 П -2 8 П. 3 П. 2 П. 2