Сумму чисел, полученных при вызове F(n) обозначим через S(n)

Согласно алгоритму:

S(n)=n+S(n+2)+S(n*3) при n<6, 

S(n)= n,n>=6

2) аккуратно и последовательно выполним вычисления:

s(2)=2+s(4)+S(6), т.е необходимо найти S(4) и s(6).

  s(4)=4+s(6)+s(12)

  s(6)=6

  s(12)=12

s(4)=4+6+12=22

s(2)=2+22+6=30

Ответ 30.

Рассмотрим еще один рекурсивный алгоритм:

procedure F(n: integer);

Begin

 writeln('*');

 if n > 0 then begin

F(n-2);

F(n div 2);

F(n div 2);

 end

end;

 Сколько символов "звездочка" будет напечатано на экране при выполнении вызова F(5)?

Обозначим через Z(n) количество звездочек, которые выводит программа при вызове F(n)

Из программы видим, что

Z(n) = 1 при всех n <= 0

Z(n) = 1 +Z(n-2) + Z(n div 2) + Z(n div 2) при n > 0

N div 2– это частное от деления n на 2

4) попробуем начать с нуля:

Z(0) = 1

Z(1) = 1 + Z(-1) + Z(0) + Z(0) = 1 + 1 +2* 1 =4

Z(2) = 1 + Z(0) + Z(1) + Z(1) = 1 + 1 + 2*4 = 10

Z(3) = 1 + Z(1) + Z(1)+ Z(1) = 1 +3* 4 = 13

Z(4) = 1 + Z(2) + Z(2) + Z(2) = 1 + 3*10 = 31

Z(5) = 1 + Z(3) + Z(2) + Z(2) = 1 + 13 +2*10 = 34

Можно анализировать с конца, как в предыдущей задаче, ответ будет таким же.

Ответ:34

Следующая задача:

Определите, что выведет на экран программа при вызове F(9).

procedure F(n: integer);

Begin

if n > 0 then begin

write(n);

F(n - 4);

F(n div 2)

end

end;

Решение:

1. при вызове F(9) условие n>0 выполняется, распечатывается 9, затем вызывается F(n-4) = F(5), затем вызывается F(n div 2) = F(4); т.е. можно записать, что F(9)= 9 F(5) F(4)

Аналогично рассматриваем F(5) и F(4)

F(5)= 5 F(1) F(2)

F(4)= 4 F(0) F(2)

Теперь неизвестны F(2), F(1)

3. F(2)= 2 F(-2) F(1)

F(1)= 1 F(-3) F(0)=1, т.к при n<=0 ничего не выводится 

F(2)= 2 F(-2) F(1) =2 1

F(4)= 4 F(0) F(2) =4 2 1

F(5)= 5 F(1) F(2)=5 1 2 1

F(9)= 9 F(5) F(4)=9 5 1 2 1 4 2 1

 

Учащимся проверить данную задачу на компьютере, выполнив следующую программу:

program rekyrsia;

procedure F(n: integer);

Begin

if n > 0 then begin

write(n);

F(n - 4);

F(n div 2)

end

end;

Begin

f(9);

readln;

End.

Последовательность будет аналогичной.

Задачи, разобранные в теоретическом материале желательно набрать в ABCPascal и проанализировать.

Домашнее задание:

Составить программу в ABCPascal для решения задачи и присоединить в ВШ.

Задача. Написать программу вычисления членов геометрической прогрессии через рекурсию (функцию или подпрограмму).

.

 

МЕСТО ВСТАВКИ ВЫПОЛНЕННОГО ДОМАШНЕГО ЗАДАНИЯ

 Напоминаю. В четверг 21.05 2020 видеоурок с использованием Zoom. Ссылку выложу в whatsapp 21.05 перед уроком. Начало в 9.00.

ПРИМЕЧАНИЕ

Нужно скачать и иметь у себя дома Электронный учебник, которым мы пользовались на уроке, и программу ABCPascal. Это все находится на Яндекс диске по ссылкам:

- учебник (занимает 3,13 Мб) https://yadi.sk/d/5YNwdkJFVqXL0w

- программа для установки ABCPascal (занимает 84,4 Мб) https://yadi.sk/d/uT4dRKgYj1JX6A

 

Вопросы можно задать по адресу a-lvr@yandex.ru, или в WhatsApp +7(9205646603) 7 мая 2020 года с 9.00 до 10.00 (время фактического проведения урока 1-ая и 2-ая группа),   или 13 мая 2020 года в среду с 15.15 до 16.00 (часы неаудиторной занятости, проведение индивидуальной консультации).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: