Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
рпр.doc
Скачиваний:
3
Добавлен:
22.11.2018
Размер:
328.19 Кб
Скачать

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]