1) Ниже на пяти языках программирования записан рекурсивный алгоритм F.
def F(n): print(n, end='') if n >= 3: F(n // 2) F(n - 1)
procedure F(n: integer); begin write(n); if n >= 3 then begin F(n div 2); F(n - 1) end end;
void F(int n) { std::cout << n; if (n >= 3) { F(n / 2); F(n - 1); } }
Запишите подряд без пробелов и разделителей все числа, которые будут выведены на экран при выполнении вызова F(5). Числа должны быть записаны в том же порядке, в котором они выводятся на экран
2) Ниже на трех языках программирования записан рекурсивный алгоритм F.
def F(n): if n > 0: F(n - 1) print(n,end='') F(n - 2)
procedure F(n: integer); begin if n > 0 then begin F(n - 1); write(n); F(n - 2); end end;
void F(int n){ if (n > 0){ F(n - 1); std::cout << n; F(n - 2); } }
Запишите подряд без пробелов и разделителей все числа, которые будут напечатаны на экране при выполнении вызова F(4). Числа должны быть записаны в том же порядке, в котором они выводятся на экран.
3) Ниже на трех языках программирования записан рекурсивный алгоритм f.
def f(x): if x<16: f(x*2) print(2*x+1,end='') print(2*x-1,end='')
procedure f(x: integer); begin if x < 16 then begin f(x*2); write(2*x+1); write(2*x-1); end; end;
void f(int x) { if (x < 16) { f (2*x); cout << 2*x+1; cout << 2*x-1; } }
Запишите подряд без пробелов и разделителей все числа, которые будут напечатаны на экране при выполнении вызова f(1). Числа должны быть записаны в том же порядке, в котором они выводятся на экран.
4) Ниже на трех языках программирования записан рекурсивный алгоритм f.
def f(x): if x<5: print(x,end='') f(x+1) print(x,end='')
procedure f(x: integer); begin if x < 5 then begin write(x); f(x + 1); write(x); end; end;
void f(int x) { if (x < 5) { cout <<x; f(x + 1); cout <<x; } }
5) Ниже на трех языках программирования записан рекурсивный алгоритм F.
def F(n): if n > 0: print(n) F(n - 3) F(n // 3)
procedure F(n: integer); begin if n > 0 then begin write(n); F(n - 3); F(n div 3) end; end;
void F(int n) { if (n > 0) { cout <<n; F(n - 3); F(n / 3); } }
Запишите подряд без пробелов и разделителей все числа, которые будут напечатаны на экране при выполнении вызова F(9). Числа должны быть записаны в том же порядке, в котором они выводятся на экран.
6) Ниже записаны две рекурсивные процедуры: F и G. Сколько символов «звёздочка» будет напечатано на экране при выполнении вызова F(11)?
def F(n): if n > 0: G(n - 1) def G(n): print("*") if n > 1: F(n - 3)
procedure F(n: integer); begin if n > 0 then G(n - 1); end; procedure G(n: integer); begin writeln('*'); if n > 1 then F(n - 3); end;
void F(int n) { if (n > 0) G(n - 1); } void G(int n) { printf("*"); if (n > 1) F(n - 3); }
7) Ниже записаны две рекурсивные функции: F и G. Чему будет равно значение, вычисленное при выполнении вызова F(6)?
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
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;
int F(int n) { if (n > 2) return F(n-1) + G(n-2); else return n; } void G(int n) { if (n > 2) return G(n-1) + F(n-2); else return n+1; }
8) Ниже представлена реализация рекурсивной процедуры на трех языках программирования:
def F(n): print(n) if n < 6: F(n+2) F(n*3)
procedure F(n: integer); begin writeln(n); if n < 6 then begin F(n+2); F(n*3) end end;
void F(int n) { cout << n; if (n < 6) { F(n + 2); F(n * 3); } }
Найдите сумму чисел, которые будут выведены при вызове F(1).
9) Ниже представлена реализация рекурсивной процедуры на трех языках программирования:
def F(n): if n < 3: print("*") else: F(n-1) F(n-2) F(n-2)
procedure F(n: integer); begin if n < 3 then write('*') else begin F(n-1); F(n-2); F(n-2) end; end;
void F(int n) { if (n < 3) cout<< "*"; else { F(n - 1); F(n - 2); F(n - 2); } }
Сколько звездочек напечатает эта процедура при вызове F(6)?
10) Ниже представлена реализация рекурсивной процедуры на трех языках программирования:
def F(n): if n==-3: return 1 elif n==0: return F(n-1) else: return n*F(n-1)
function F(n:integer):integer; begin if n=-3 then F:=1 else if n=0 then F:=F(n-1) else F:=n*F(n-1); end;
int F(int n) { if (n == -3) return 1; else if (n == 0) return F(n - 1); else return n*F(n - 1); }
Чему будет равна переменная n, если ей присвоить результат вызова F(5)?
11) Ниже представлена реализация рекурсивной процедуры на трех языках программирования:
def F(n): if n==4: return 1 elif n==0: return F(n+1) else: return n*F(n+1)
function F(n:integer):integer; begin if n=4 then F:=1 else if n=0 then F:=F(n+1) else F:=n*F(n+1); end;
int F(int n) { if (n == 4) return 1; else if (n == 0) return F(n + 1); else return n*F(n + 1); }
Чему будет равна переменная n, если ей присвоить результат вызова F(-4) ?
12) Ниже представлена реализация рекурсивной процедуры на трех языках программирования:
def f(n): if n>0: if n % 2 != 0: print('!'*(n%10)) else: print('?'*(n%10)) f(n//10)
procedure f(n:integer); begin if n>0 then begin if n mod 2 <>0 then writeln('!'*(n mod 10)) else writeln('?'*(n mod 10)); f(n div 10); end; end;
void f(int n) { if (n > 0) { if (n % 2 != 0) cout << '!'*(n % 10); else cout << '?'*(n % 10); f(n / 10); } }
Сколько символов ? будет всего распечатано на экране при вызове f(865432) ?
13) Ниже представлена реализация рекурсивной процедуры на трех языках программирования:
def f(n): if n>0: print('?'*(n%7)) f(n//10)
procedure f(n:integer); begin if n>0 then begin writeln('?'*(n mod 7)); f(n div 10); end; end;
void f(int n) { if (n > 0) { cout << '?'*(n % 7) << endl; f(n / 10); } }
Какое максимальное количество символов ? будет распечатано в одной строке при вызове f(2346) ?
14) Ниже представлена реализация рекурсивной процедуры на трех языках программирования:
void f(int n) { if (n > 0) { if (n % 2 == 0) cout << '!'*(n % 10); else cout << '?'*(n % 10); f(n / 10); } }
Сколько символов ? будет всего распечатано на экране при вызове f(73469) ?
15) Ниже представлена реализация рекурсивной процедуры на трех языках программирования:
def f(n,s): if n>0: print(s) f(n//10,s+'???')
procedure f(n:integer;s:string); begin if n>0 then begin writeln(s); f(n div 10,s+'???'); end; end;
void f(int n, string s) { if (n > 0) { cout << s; F(n / 2, s + '???'); } }
Сколько символов ? будет всего распечатано на экране при вызове f(7135,'??') ?
16) Ниже представлена реализация рекурсивной процедуры на трех языках программирования:
def f(n,s): if n>0: print(s) f(n//2,s+'?')
procedure F(n:integer;s:string); begin if n>0 then begin writeln(s); F(n div 2, s+'?'); end; end;
void F(int n, string s) { if (n > 0) { cout << s; F(n / 2, s + '?'); } }
Сколько символов ? будет всего распечатано на экране при вызове F(35,'?')?
Задания взяты из базы данных ФИПИ, сайта К.Полякова или придуманы мною