- •2008 № I информатика
- •2008 № 4 Информатика
- •2. Статья "Частотный анализ"
- •1. Общие вопросы
- •2. Особенности выполнения рекурсивных алгоритмов
- •3. Рекурсивные функции и процедуры для обсуждения
- •2008 Nt 5 информатика
- •4. Задания на использование рекурсии
- •2008 № 5 Информатика
- •2008 N» 5 информатика
- •2008 N» 5 информатика
- •2008 № 5 Информатика
- •5. Прямая и косвенная рекурсия
- •5. Формы рекурсивных процедур6
- •2008 № 5 Информатика
4. Задания на использование рекурсии
ПрППОСНМЫС .1.1Д.П111И М,Ч\Т(ЧЛ1. НЧКХЧЬЛЧЧНЫ 11.1 '\Ч*ЫЧ»Ы\ ' У1Ч^К.»\, И.1 К*»Н1|Ч\М.ИЫ\ \U444I1H14TUHX
Л1.ЛЛННЧ на ,vvwt и т.п. *
t. l\».ij\Uxvr.(Tb IllX^ip.lAwty ДДЧ р.КЧОГ.1 ЧИч V I v Ч*К"'
пин мл м .««та по ,,: ^ччиплчлоа „ Г X ,к ,к,л1, л „ ело \\-кч1И.чч 1Х'ку|хнв1ич- описание:
>-' -C-LCT-Cr.+C-,'. при о sins,,
Г,-;.., ■■..•.,■
IVkv|X hhii.iu функция для расчета зкпения С :
Function Oim(n, m: bytel: word:
Begin
If im - 0) Or |p. n;) Then Else Опт :- О-м- • -End,-
I. Cocr.mnn. npi4-|i.i.MMy для р.ичег.| •; ю чч-h.i ;л-AJiinoii лрпфмегичлкой nporpivciui.
Pt'lilCHUt'
МОЖНО СКЛ.ЧЧЬ, ЧТО Н OlipCAO.M'llllll ПОНЯТИЯ "а|>иф\л
тическ.ш прогрессия" содержится ]ч-ку|Ч'ИН1ку от ^ ние искомого .шачення.
В приведенной ниже функции, к|х*ме п. 1кполь,1\к1г-см также параметры id и J— соответственно первый член ир»."»г]Ч\ч'ии и ее рчшкхть:
Function Ar nlal, d: real; n:bytei: Begin
If :-. '. Then Ar _ n :
Else ■-■• ■■ ■ ■">• п(яЬ .., .. End;
3.Civv.iniin. щчч-|и\хм\ для гисчет-.i ':-л>ч.ч1и .чд.ш-ной геометрической n|x"»rpi.vcitii.
Pt'Uti'HUl'
Здесь рекурсивная функция но .mhoiwsi .тллогичнл приведенной в щч-дыдущей лиаче:
Function «>о _ n(al, :: real; n: byte): re.-. Begin
If n - 1 Then ciec _ n :• a'. Else vVc» p. :j й^о n(.U, :, End; — в ней v- — .in.i.MenaivAi. щчч-ресснн.
4. Составить программу для ркчета суммы к первых членов лианной арифметической nporpecvuti. Vt'tiiCHUi'
В пршч-деннон ниже функции в качестве ncuo.uor.i-тслыюй исиольлуется функция, описаннам в лилче -: Function Summ Av niab ^': io.\l;
p.: byte): real; Begin
If и '■ 1 Then Summ _ .v Bis* Sumi At' " :■■'
2008 № 5 Информатика
НАЛЫ К УРОК N
19
Summ _ Ar _ n(al, d, n — 1) + Ar_n(al, d, n) End;
5. Составить программу для расчета суммы // первых членов заданной геометрической профессии. Решение
Соответствующая функция: Function Summ _ Geo _ n(al, d: real;
n: byte): real; Begin
If n = 1 Then Summ _ Geo _ n := al Else Summ _ Geo _ n : =
Summ Geo_n(al, d, n - 1) + Geo_n(al, d, n) End;
6. Дана строка символов, представляющая собой правильную запись натурального числа в ;;-ичной системе счисления (2 < р < 9). Составить программу перевода этого числа в десятичную систему счисления. Решение
Здесь надо вспомнить схему Горнера для расчета десятичного значения числа по его цифрам, которая по сути является рекурсивной. Так, если число в р-ичной системе является четырехзначным (а^а^), то десятичное значение этого числа определяется следующим образом:
Функция, "работающая" по этой схеме, может иметь вид:
Function RevTolO (S: string; p: byte): longint;
Var last: byte;.code: integer;
(last - последняя цифра в строковой записи числа)
Begin
If length(S) = 1 Then Begin
• {Переводим символ-цифру в число,} Val(S[Length(S)], last, code); {которое и будет значением функции} RevTolO := last End Else Begin
{Переводим последний символ строки S в число last}
Val(S[Length(S)], last, code); {и используем схему Горнера} RevTolO := RevTolO (Copy (S, 1,
Length{S) - l), p) * p + last End End;
Можно также сначала перевести в число всю строку S, а затем "работать" с его цифрами:
Function RevTolO(S: string; p: byte): longint; Var k: longint; last: byte;
code: integer;
(k — число, соответствующее S) Begin
(Определяем число к)
Val(S, k, code);
If k < 10 Then RevTolO :=■ k
Else
Begin
{Определяем последнюю цифру числа к)
last := k mod 10;
{Переводим число к
без его последней цифры
в символьное представление}
Str(k div 10, s);
{и используем схему Горнера}
RevTolO := R_tol0(s, p) * p + last End End;
7. Разработать программу для определения суммы цифр заданного натурального числа.
Решение
Соответствующая рекурсивная функция во многом аналогична функции, рассмотренной в разделе 3.
Function S(a: longint): byte;
Begin
If a < 10 Then S := a
Else S := a mod 10 + S(a div 10)
End;
8. Разработать программу для вычисления произведения элементов одномерного числового массива.
Решение
Функция, с помощью которой можно решить задачу, также аналогична рассмотренной в разделе 3.
Function M(k: byte): real;
Begin
If k = 1 Then M := a[k - 1] Else M := a[k] * M(k - 1)
End;
Примечание. Имеется в виду, что элементы массива а — вещественные числа.
От редакции. Здесь и в других задачах, связанных с использованием массивов, можно учесть замечание, сделанное при обсуждении функции для расчета суммы элементов массива в разделе 3.
9. Разработать программу для расчета среднего арифметического всех элементов числового массива.
Решение
Рекурсивная функция, которая возвращает искомое значение, имеет вид:
Function Aver(k: byte): real;
{k — число элементов обрабатываемого массива}
Begin
If k - 2 Then Aver := (a[l] + a[k])/2 Else Aver :- (a[k] + Aver{k - 1) * (k - l))/k End;
10. Разработать программу для расчета значения а" (а — вещественное число, аФ 0, п — целое).
Решение Можно записать:
20