Слайд 3Значит сегодня у нас B11
Рекурсивные алгоритмы
Слайд 5Задание 1
Последовательность чисел трибоначчи задается рекуррентным соотношением:
F(1) = 0
F(2) =
1
F(3) = 1
F(n) = F(n–3) + F(n–2) + F(n–1), при
n >3, где n – натуральное число.
Чему равно девятое число в последовательности трибоначчи?
Слайд 6Решение
F(4) = F(1) + F(2) + F(3) = 2,
F(5) =
F(2) + F(3) + F(4) = 4,
F(6) = F(3) +
F(4) + F(5) = 7,
F(7) = F(4) + F(5) + F(6) = 13,
F(8) = F(5) + F(6) + F(7) = 24,
F(9) = F(6) + F(7) + F(8) = 44.
Слайд 7Задание 2
Алгоритм вычисления значения функции F(n), где n - натуральное
число, задан следующими соотношениями:
F(1) = 5;F(2) = 5;
F(n) = 5*F(n
− 1) − 4*F(n − 2) при n >2.
Чему равно значение функции F(13)? В ответе запишите только натуральное число.
Слайд 8Решение
F(1) = 5;F(2)=5;
F(3) = 25 - 20 = 5;
F(4) =
25 - 20 = 5;
F(5) = 25 - 20 =
5;
…
Слайд 9Задание 3
Алгоритм вычисления значения функции F(n), где n — натуральное число, задан следующими
соотношениями:
F(n) = n + 1 при n ≤ 2;
F(n) = F(n − 1) + 3 · F(n − 2)
при n > 2.
Чему равно значение функции F(4)? В ответе запишите только натуральное число.
Слайд 10Решение
F(1) = 2;
F(2) =3;
F(3) = 3 + 6 = 9;
F(4)
= 9 + 9 = 18;
Слайд 11Задание 4
Чему равна сумма всех чисел, напечатанных на экране при
выполнении вызова F(1)?
void F(int n)
{
cout
if (n < 5) {
F(n + 1);
F(n + 3);
}
}
Слайд 12Решение
1, 2, 3, 4, 5, 7, 6, 5, 4, 5,
7. Их сумма равна 49.
Слайд 13Задание 5
Чему будет равно значение, вычисленное алгоритмом при выполнении вызова
F(5)?
int F(int n)
{
if (n > 2)
return F(n-1) + F(n-2);
else return 1;
}
Слайд 14Решение
F(5)= F(4) + F(3) = F(3) + F(2) + F(2)
+ F(1) = F(2) + F(1) +1 + 1 +
1 = 5.
Слайд 15Задание 6
Значение, вычисленное при вызове F(8)
int F(int n)
{
if (n
> 2)
return F(n-1) + G(n-2);
else return 1;
}
int
G(int n)
{
if (n > 2)
return G(n-1) + F(n-2);
else return 1;
}
Слайд 16Решение
F(1) = 1;
F(2) = 1;
F(3) = G(1) + F(2) =
2;
F(4) = G(2) + F(3) = 1 + 2 =
3;
F(5) = F(4) + G(3) = 3 + 2 = 5;
F(6) = F(5) + G(4) = 5 + 3 = 8;
F(7) = F(6) + G(5) = 8 + 5 = 13;
F(8) = F(7) + G(6) = 13 + 8 = 21.
Слайд 17Задание 7
Значение при вызове G(5)
int F(int n) {
if (n
> 2)
return F(n-1)+G(n-1)+F(n-2);
else return n;
}
int G(int
n){
if (n > 2)
return G(n-1)+F(n-1)+G(n-2);
else return n+1;
}
Слайд 18Решение
F(1) = 1
G(1) = 2
F(2) = 2
G(2) = 3
F(3) =
F(2) + F(1) + G(2) = 6
G(3) = G(2) +
G(1) + F(2) = 7
F(4) = F(3) + F(2) + G(3) = 15
G(4) = G(3) + G(2) + F(3) = 16
G(5) = G(4) + G(3) + F(4) = 38
Слайд 19Задание 8
Сколько * будет выведено в консоль при вызове F(6)?
void
F(int n)
{
if (n > 0)
{
printf("*");
F(n - 1);
F(n / 3);
}
}
Слайд 20Решение
F(6)
{
F(5)
F(2)
{
F(4)
F(1)
F(1)
F(0)
{
F(3)
F(1)
F(0)
F(0)
F(0)
F(0)
{
F(2)
F(1)
F(0)
{
F(1)
F(0)
{
F(0)
}
}
}
}
}
}
Слайд 21Задание
Что будет выведено при вызове F(1)?
void F (int n)
{
if (n < 8) {
std::cout
<< n;
F (2 * n);
F (n + 3);
}
}
Слайд 22Задание B19 –
обработка массивов
Слайд 24Задание 1
В программе используется фрагмент одномерного целочисленного массива A с
индексами от 1 до 10. Значения элементов равны 6, 7,
3, 8, 4, 1, 2, 0, 9, 5 соответственно, т. е. A[1] = 6, A[2] = 7 и т. д. Определите значение переменной s после выполнения
s = 0;
n = 10;
for (i = 3; i <= n; i++) {
s = s + A[i] - A[i-2];
}
Слайд 26Задание 2
В начале выполнения этого фрагмента в массиве находились числа
1, 12, 23, 34, 45, 56, 67, 78, 89, 90,
т. е. A[1]=1, A[2]=12 и т.д. Чему будет равно значение переменной s после выполнения данного фрагмента?
s = 0;
n = 10;
for (i = 2; i <= n; i++) {
s=s + A[i]*A[i]-A[i-1]*A[i-1];
}
Слайд 28Задание 3
Перед началом выполнения данного фрагмента эти элементы массива имели
значения 7, 8, 8, 1, 2, 2, 3, 3, 8,
5 (т.е. A[1] = 7, A[2] = 8, …, A[10] = 5). Определите значение переменной s после выполнения
n = 10;
s = 0;
for (i = 2; i <= n; ++i) {
if (A[i-1] < A[i]) {
t = A[i-1];
A[i-1] = A[i];
A[i] = t + 1;
s = s + 1;
}
}
Слайд 29Решение
Изначальный порядок значений: 7, 8, 8, 1, 2, 2, 3,
3, 8, 5.
Первое изменение элементов: 8, 8, 8, 1, 2, 2,
3, 3, 8, 5.
Второе изменение элементов: 8, 8, 8, 2, 2, 2, 3, 3, 8, 5.
Третье изменение элементов: 8, 8, 8, 2, 2, 3, 3, 3, 8, 5.
Четвёртое изменение элементов: 8, 8, 8, 2, 2, 3, 3, 8, 4, 5.
Последнее изменение элементов: 8, 8, 8, 2, 2, 3, 3, 8, 5, 5.
Слайд 30Задание 4
Элементы двухмерного массива A размером 10x10 первоначально были равны
1. Сколько будет нулей после выполнения?
for (n = 1; n
<= 4; n++) {
for (k = 1; k <= n+1; k++) {
A[n][k]= A[n][k]-1;
A[n][k+1]= A[n][k]-1;
}
}
Слайд 32Задание 5
Элементы двухмерного массива A размером 10x10 первоначально были равны
4. Сколько будет девяток после выполнения?
for (i = 1; i
<= 4; i++) {
for (j = 1; j <= 5; j++) {
A[i][j]=A[i][j]+4;
A[j][i]=A[j][i]+5;
}
}
Слайд 34Задание 6
Описан массив А из 24 элементов. Чему будет равно
значение элемента A[24]?
n=24;
A[1] = 4;
for (i = 2; i
<= n; i++) {
A[i] = 4*A[i–1] % 10;
}
Слайд 36Задание 7
В программе описан одномерный целочисленный массив с индексами от
0 до 9. В начале выполнения этого фрагмента в массиве
находились числа 3, 2, 4, 6, 3, 10, 12, 14, 16, 18 т. е. А[0]=3, А[1]=2 и т. д. Чему будет равно значение переменной с после выполнения?
c = 0;
for (i = 1; i <= 8; i++)
if (A[i] == A[0])
{
c++;
t=A[i+1];
A[i+1]= A[i];
A[i]= t;
}
cout « c « endl;