ЕГЭ-16. Рекурсивные процедуры и функции

384 задачи
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.

(К. Амеличев) Алгоритм вычисления функции F(n) задан следующими соотношениями:

F(n) = n при n ≤ 3;
F(n) = n // 4 + F(n‐3) при 3 < n ≤ 32;
F(n) = 2 · F(n‐5) при n > 32

Здесь // обозначает деление нацело. В качестве ответа на задание выведите значение F(100).

(Д.Ф. Муфаззалов, г. Уфа) Определите количество различных значений n таких, что n и m ‐ натуральные числа, а значение F(n, m) равно числу 30.

def F(n,m):
 if m == 0:
  d = 0
 else:
  d = n+F(n, m-1)
 return d
function F(n,m: integer): integer;
begin
 if m == 0 then
   F:= 0
 else
   F:= n + F(n,m-1)
end;
int F(int n, int m)
{
if( m == 0 )
  return 0;
else
  return n+F(n,m-1);
}

 

(Д.Ф. Муфаззалов, г. Уфа) Определите количество различных натуральных значений n таких, что значение F(n, 2) находится в диапазоне [100; 1000].

def F(n,m):
 if m == 0:
   d = 1
 else:
   d = n*F(n, m-1)
 return d
function F(n,m: integer): integer;
begin
 if m = 0 then
   F:= 1
 else
   F:= n*F(n,m-1)
end;
int F(int n, int m)
{
if( m == 0 )
  return 1;
else
  return n*F(n,m-1);
}

 

(Д.Ф. Муфаззалов, г. Уфа) Определите количество различных значений n таких, что n и m ‐ натуральные числа, находящиеся в диапазоне [100; 1000], а значение F(n, m) равно числу 30.

def F(n,m):
 if m == 0:
   return n
 else:
   return F(m,n%m)
function F(n,m:
   integer): integer;
begin
 if m = 0 then
   F:= n
 else
   F:= F(m, n mod m)
end;
int F(int n, int m)
{
if( m == 0 )
  return n;
else
  return F(m, n%m);
}

 

(Д.Ф. Муфаззалов, г. Уфа) Определите наименьшее значение суммы n+m такое, что значение F(n, m) больше числа 15 и выполняется условие n и m ‐ натуральные числа. Запишите в ответе сначала значения n и m, при которых указанная сумма достигается, в порядке неубывания, а затем ‐ соответствующее значение F(n, m). Числа в ответе разделяйте пробелом.

Python Паскаль C++
def F(n,m):
 if n<m:
  n,m = m,n
 if n != m:
   return F(n-m,m)
 else:
   return n
function F(n,m: integer): integer;
begin
 if n > m then
  F:= F(n-m,m)
 else
  if n < m then
    F:= F(n,m-n)
  else
    F:= n;
end;
int F(int n, int m)
{
 if( n > m )
   return F(n-m,m);
 else
   if( n < m )
     return F(m-n,n);      
   else
     return n;
}

 

(Д.Ф. Муфаззалов) Определите наименьшее число n такое, что при вызове F(n) второе выведенное число будет больше числа 51. Запишите в ответе сначала найденное значение n, а затем через пробел ‐ соответствующее значение F(n).

Python Паскаль C++
def F(n):
  print( n )
  if n > 0:
    d = (n%10 + F(n//10))
    print(d)
    return d
  else:
    return 0

 
function f(n: integer): integer;
var d:integer;
begin
 writeln(N);
 if n > 0 then begin
   d := n mod 10 + F(n div 10);
   writeln( d );
   F := d
 end
 else F:= 0;
end;
int F(int n)
{
cout << n << endl;
if( n ) {
  int d = n%10 + F(n/10);
  cout << d << endl;
  return d;
  }
else
  return 0;
}

(Д.Ф. Муфаззалов) Определите наименьшее значение n такое, что последнее выведенное число при вызове F(n) будет больше числа 32. Запишите в ответе сначала найденное значение n, а затем через пробел ‐ соответствующее значение F(n).

Python Паскаль C++
def F(n):
  print(n)
  if n>0:
    d=n%10+F(n//10)
    print(d)
    return d
  else: return 0

 
function F(n: integer): integer;
var d:integer;
begin
 writeln(N);
 if n > 0 then begin
   d := n mod 10+ F(n div 10);
   writeln(d);
   F := d
 end
 else F:= 0;
end;
int F(int n)
{
cout << n << endl;
if (n){
  int d = n % 10 + F(n/10);   
  cout << d << endl;
  return d;
  }
else return 0;
}

(Д.Ф. Муфаззалов) Определите наибольшее трехзначное значение n, при котором значение F(n), будет больше числа 7. Запишите в ответе сначала найденное значение n, а затем через пробел ‐ соответствующее значение F(n).

Python Паскаль C++
def F(n):
  if n<10:
    return n
  else:
    m=F(n//10)
    d=m%10;
    if m<d: return d
    else: return m
function F(n: integer): integer;
var m,d: byte;
begin
 if n < 10 then F:=n
 else begin
   m:= F(n div 10);
   d:= m mod 10;
   if m < d then F:=d
   else F := m
 end
end;

 
int F(int n)
{
if(n < 10)
   return n;
else {
 int m = F(n/10),    
     d = m%10;
 if( m < d )
   return d;
 else
  return m;
  }
}

(Д.Ф. Муфаззалов) Определите наименьшее значение n, при котором значение F(n), будет больше числа 320. Запишите в ответе сначала найденное значение n, а затем через пробел ‐ соответствующее значение F(n).

Python Паскаль C++
def F(n):
  if n>0:
    return n%10*F(n//10)
  else: return 1
 
function F
(n: integer): integer;
begin
 if n > 0 then
  F:= n mod 10 * F(n div 10)
 else
    F:= 1;
end;

 
int F(int n)
{
if(n)
    return n%10*F(n/10);
else return 1;
}

 

Определите наименьшее значение n, при котором сумма чисел, которые будут выведены при вызове F(n), будет больше 3200000. Запишите в ответе сначала найденное значение n, а затем через пробел ‐ соответствующую сумму выведенных чисел.

Python Паскаль C++
def F( n ):
  print(n*n)
  if n > 1:
    print(2*n+1)
    F(n-2)
    F(n//3)

 
procedure F
    ( n: integer );
begin
  writeln(n*n);
  if n > 1 then begin
    writeln(2*n+1);
    F(n-2);
    F(n div 3);
  end;
end;
void F( int n )
{
  cout << n*n << endl;
  if( n > 1 ) {
    cout << 2*n+1 << endl;
    F(n-2);
    F(n/3);
    }
}

Определите наименьшее значение n, при котором сумма чисел, которые будут выведены при вызове F(n), будет больше 3200000. Запишите в ответе сначала найденное значение n, а затем через пробел ‐ соответствующую сумму выведенных чисел.

Python Паскаль C++
def F( n ):
  print(n-5)
  if n > 1:
    print(n+8)
    F(n-2)
    F(n-3)

 
procedure F
    ( n: integer );
begin
  writeln(n-5);
  if n > 1 then begin
    writeln(n+8);
    F(n-2);
    F(n-3);
  end;
end;
void F( int n )
{
  cout << n-5 << endl;
  if( n > 1 ) {
    cout << n+8 << endl;
    F(n-2);
    F(n-3);
    }
}

Определите наименьшее значение n, при котором сумма чисел, которые будут выведены при вызове F(n), будет больше 5000000. Запишите в ответе сначала найденное значение n, а затем через пробел ‐ соответствующую сумму выведенных чисел.

Python Паскаль C++
def F( n ):
  print(2*n+1)
  if n > 1:
    print(3*n-8)
    F(n-1)
    F(n-4)

 
procedure F
    ( n: integer );
begin
  writeln(2*n+1);
  if n > 1 then begin
    writeln(3*n-8);
    F(n-1);
    F(n-4);
  end;
end;
void F( int n )
{
  cout << 2*n+1 << endl;
  if( n > 1 ) {
    cout << 3*n-8
         << endl;
    F(n-1);
    F(n-4);
    }
}

Определите наименьшее значение n, при котором сумма чисел, которые будут выведены при вызове F(n), будет больше 1000000. Запишите в ответе сначала найденное значение n, а затем через пробел ‐ соответствующую сумму выведенных чисел.

Python Паскаль C++
def F( n ):
  print(n+1)
  if n > 1:
    print(2*n)
    F(n-1)
    F(n-3)

 
procedure F
    ( n: integer );
begin
  writeln(n+1);
  if n > 1 then begin
    writeln(2*n);
    F(n-1);
    F(n-3);
  end;
end;
void F( int n )
{
  cout << n+1 << endl;
  if( n > 1 ) {
    cout << 2*n << endl;
    F(n-1);
    F(n-3);
    }
}

Определите наименьшее значение n, при котором сумма чисел, которые будут выведены при вызове F(n), будет больше 1000000. Запишите в ответе сначала найденное значение n, а затем через пробел ‐ соответствующую сумму выведенных чисел.

Python Паскаль C++
def F( n ):
  print(n+1)
  if n > 1:
    print(n+5)
    F(n-1)
    F(n-2)

 
procedure F
    ( n: integer );
begin
  writeln(n+1);
  if n > 1 then begin
    writeln(n+5);
    F(n-1);
    F(n-2);
  end;
end;
void F( int n )
{
  cout << n+1 << endl;
  if( n > 1 ) {
    cout << n+5 << endl;
    F(n-1);
    F(n-2);
    }
}

Определите, сколько символов * выведет эта процедура при вызове F(140):

Python Паскаль C++
def F( n ):
  print('*')
  if n >= 1:
    print('*')
    F(n-1)
    F(n//2)

 
procedure F( n: integer );
begin
  write('*');
  if n >= 1 then begin
    write('*');
    F(n-1);
    F(n div 2);
  end;
end;
void F( int n )
{
  cout << '*';
  if( n >= 1 ) {
    cout << '*';
    F(n-1);
    F(n/2);
    }
}

Определите, сколько символов * выведет эта процедура при вызове F(280):

Python Паскаль C++
def F( n ):
  print('*')
  if n >= 1:
    print('*')
    F(n-1)
    F(n//3)
    print('*')

 
procedure F( n: integer );
begin
  write('*');
  if n >= 1 then begin
    write('*');
    F(n-1);
    F(n div 3);
    write('*');
  end;
end;
void F( int n )
{
  cout << '*';
  if( n >= 1 ) {
    cout << '*';
    F(n-1);
    F(n/3);
    cout << '*';
    }
}
Поделиться
Класснуть