16-е задание: «Вычисление рекуррентных выражений» Уровень сложности — повышенный, Требуется использование специализированного программного обеспечения — нет, Максимальный балл — 1, Примерное время выполнения — 9 минут.
Проверяемые элементы содержания: Вычисление рекуррентных выражений
Ниже записаны две рекурсивные функции (процедуры): F и G. Сколько символов «звездочка» будет напечатано на экране при выполнении вызова F(18)?
Паскаль:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure F(n:integer);forward;procedure G(n:integer);forward;procedure F(n:integer);beginwrite('*');if n > 10then F(n -2)else G(n);end;procedure G(n:integer);beginwrite('**');if n > 0then F(n -3);end;
procedure F(n: integer); forward;
procedure G(n: integer); forward;
procedure F(n: integer);
begin
write('*');
if n > 10 then F(n - 2) else G(n);
end;
procedure G(n: integer);
begin
write('**');
if n > 0 then F(n - 3);
end;
Бейсик:
DECLARESUB F(n)
DECLARESUB G(n)
SUB F(n)
PRINT"*"IF n > 10 THEN
F(n - 2)
ELSE
G(n)
ENDIFENDSUBSUB G(n)
PRINT"**"IF n > 0 THEN
F(n - 3)
ENDIFENDSUB
DECLARE SUB F(n)
DECLARE SUB G(n)
SUB F(n)
PRINT "*"
IF n > 10 THEN
F(n - 2)
ELSE
G(n)
END IF
END SUB
SUB G(n)
PRINT "**"
IF n > 0 THEN
F(n - 3)
END IF
END SUB
Python:
def F(n):
print("*")if n >10:
F(n - 2)else:
G(n)def G(n):
print("**")if n >0:
F(n - 3)
def F(n):
print("*")
if n > 10:
F(n - 2)
else:
G(n)
def G(n):
print("**")
if n > 0:
F(n - 3)
Ниже записаны две рекурсивные функции (процедуры): F и G. Какова сумма чисел, напечатанных на экране при выполнении вызова F(17)?
Паскаль:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure F(n:integer);forward;procedure G(n:integer);forward;procedure F(n:integer);beginwriteln(n);if n mod2=0then F(n div2)else G((n -1)div2);end;procedure G(n:integer);beginwriteln(n);if n > 0then F(n);end;
procedure F(n: integer); forward;
procedure G(n: integer); forward;
procedure F(n: integer);
begin
writeln(n);
if n mod 2 =0 then F(n div 2)
else G((n - 1) div 2);
end;
procedure G(n: integer);
begin
writeln (n);
if n > 0 then F(n);
end;
Бейсик:
DECLARESUB F(n)
DECLARESUB G(n)
SUB F(n)
PRINT n
IF n MOD 2 = 0 THEN
F(n \ 2)
ELSE
G ( (n - 1) \ 2)
ENDIFENDSUBSUB G(n)
PRINT n
IF n > 0 THEN
F(n)
ENDIFENDSUB
DECLARE SUB F(n)
DECLARE SUB G(n)
SUB F(n)
PRINT n
IF n MOD 2 = 0 THEN
F(n \ 2)
ELSE
G ( (n - 1) \ 2)
END IF
END SUB
SUB G(n)
PRINT n
IF n > 0 THEN
F(n)
END IF
END SUB
Python:
def F(n):
print(n)if n % 2==0:
F(n // 2)else:
G((n - 1) // 2)def G(n):
print(n)if n >0:
F(n)
def F(n):
print(n)
if n % 2 == 0:
F(n // 2)
else:
G((n - 1) // 2)
def G(n):
print(n)
if n > 0:
F(n)
С++:
void F(int n){
std::cout<< n << endl;if(n %2==0){
F(n /2);}else{
G((n -1)/2);}}void G(int n){
std::cout<< n << endl;if(n >0)
F(n);}
function F(n: integer):integer; forward;
function G(n: integer):integer; forward;
function F(n:integer):integer;
begin
if (n > 2) then
F:= F(n - 1) + G(n - 2)
else F:= n;
end;
function G(n:integer):integer;
begin
if (n > 2)then
G:= G(n - 1) + F(n -2)
else G:= n+1;
end;
Бейсик:
FUNCTION F(n)
IF n > 2 THEN
F = F(n - 1) + G(n - 2)
ELSE
F = n;
ENDIFENDFUNCTIONFUNCTION G(n)
IF n > 2 THEN
G = G(n - 1) + F(n -2)
ELSE
G = n+1;
ENDIFENDFUNCTION
FUNCTION F(n)
IF n > 2 THEN
F = F(n - 1) + G(n - 2)
ELSE
F = n;
END IF
END FUNCTION
FUNCTION G(n)
IF n > 2 THEN
G = G(n - 1) + F(n -2)
ELSE
G = n+1;
END IF
END FUNCTION
Python:
def F(n):
if n >2:
return F(n - 1) + G(n - 2)else:
return n
def G(n):
if n >2:
return G(n - 1) + F(n - 2)else:
return n+1
def F(n):
if n > 2:
return F(n - 1) + G(n - 2)
else:
return n
def G(n):
if n > 2:
return G(n - 1) + F(n - 2)
else:
return n+1
Вызов представленной ниже рекурсивной функции приводит к появлению на экране чисел и точек. С каким минимальным натуральным аргументом а нужно вызвать эту функцию, чтобы в результате на экране появилось 5 точек (не обязательно подряд, между точками могут встречаться числа)? Паскаль:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function gz(a:integer):integer;var p:integer;beginif a<1thenbegin
gz:=1; exit;end;if a mod3=0thenbeginwrite('...');
p:=gz(a div3)+gz(a div4);endelsebeginwrite('.');
p:=gz(a div4);end;write(p);
gz:=2;end;
function gz(a:integer):integer;
var p:integer;
begin
if a<1 then begin
gz:=1; exit;
end;
if a mod 3=0 then begin
write('...');
p:=gz(a div 3)+gz(a div 4);
end
else begin
write('.');
p:=gz(a div 4);
end;
write(p);
gz:=2;
end;
Запишите подряд без пробелов и разделителей все числа, которые будут напечатаны на экране при выполнении вызова F(9). Числа должны быть записаны в том же порядке, в котором они выводятся на экран.
Ниже записан рекурсивный алгоритм F. Запишите подряд без пробелов и разделителей все числа, которые будут напечатаны на экране при выполнении вызова F(130).
Числа должны быть записаны в том же порядке, в котором они выводятся на экран.
Паскаль:
1
2
3
4
5
6
7
8
9
procedure F(n:integer);beginif n > 1thenbeginwrite(n);
F(n div10);
F(n -40)endend;
procedure F(n: integer);
begin
if n > 1 then
begin
write(n);
F(n div 10);
F(n - 40)
end
end;
Бейсик:
SUB F(n)
IF n > 1 THENPRINT n
F(n \ 10)
F(n - 40)
ENDIFENDSUB
SUB F(n)
IF n > 1 THEN
PRINT n
F(n \ 10)
F(n - 40)
END IF
END SUB
procedure F(n:integer);forward;procedure G(n:integer);forward;procedure F(n:integer);beginif n > 2thenbeginwrite(n);
F(n -1);
G(n -2);endelsewrite(n+2);end;procedure G(n:integer);beginwrite(n);if n > 2thenbegin
G(n -1);
F(n -2);end;end;
procedure F(n: integer); forward;
procedure G(n: integer); forward;
procedure F(n: integer);
begin
if n > 2 then
begin
write(n);
F(n - 1);
G(n - 2);
end
else
write(n+2);
end;
procedure G(n: integer);
begin
write(n);
if n > 2 then
begin
G(n - 1);
F(n - 2);
end;
end;
Бейсик:
DECLARESUB F(n)
DECLARESUB G(n)
SUB F(n)
IF n > 2 THENPRINT n
F(n - 1)
G(n - 2)
ELSEPRINT n+2
ENDIFENDSUBSUB G(n)
PRINT n
IF n > 2 THEN
G(n - 1)
F(n - 2)
ENDIFENDSUB
DECLARE SUB F(n)
DECLARE SUB G(n)
SUB F(n)
IF n > 2 THEN
PRINT n
F(n - 1)
G(n - 2)
ELSE
PRINT n+2
END IF
END SUB
SUB G(n)
PRINT n
IF n > 2 THEN
G(n - 1)
F(n - 2)
END IF
END SUB
Python:
def F(n):
if n >2:
print(n, end='')
F(n - 1)
G(n - 2)else:
print(n+2, end='')def G(n):
print(n, end='')if n >2:
G(n - 1)
F(n - 2)
def F(n):
if n > 2:
print(n, end='')
F(n - 1)
G(n - 2)
else:
print(n+2, end='')
def G(n):
print(n, end='')
if n > 2:
G(n - 1)
F(n - 2)
Полина
В задании 11_7 ответ записан неверно(одна единица лишняя)
admin
Спасибо! Исправлено
Стив Джобус
Простите но 16 задание в егэ это не рекурсивные функции а кодирование чисел и системы счисления